FileStream.Seek(Int64, SeekOrigin) FileStream.Seek(Int64, SeekOrigin) FileStream.Seek(Int64, SeekOrigin) FileStream.Seek(Int64, SeekOrigin) Method

Definição

Define a posição atual do fluxo para o valor especificado.Sets the current position of this stream to the given value.

public:
 override long Seek(long offset, System::IO::SeekOrigin origin);
public override long Seek (long offset, System.IO.SeekOrigin origin);
override this.Seek : int64 * System.IO.SeekOrigin -> int64
Public Overrides Function Seek (offset As Long, origin As SeekOrigin) As Long

Parâmetros

offset
Int64 Int64 Int64 Int64

O ponto relativo a origin do qual começar a busca.The point relative to origin from which to begin seeking.

origin
SeekOrigin SeekOrigin SeekOrigin SeekOrigin

Especifica a posição inicial, final ou atual como um ponto de referência para offset usando um valor do tipo SeekOrigin.Specifies the beginning, the end, or the current position as a reference point for offset, using a value of type SeekOrigin.

Retornos

A nova posição no fluxo.The new position in the stream.

Exceções

Ocorreu um erro de E/S.An I/O error occurred.

O fluxo não dá suporte a busca, como se o FileStream fosse construído por meio de uma saída do console ou pipe.The stream does not support seeking, such as if the FileStream is constructed from a pipe or console output.

A busca é tentada antes do início do fluxo.Seeking is attempted before the beginning of the stream.

Foram chamados métodos depois que o fluxo foi fechado.Methods were called after the stream was closed.

Exemplos

O exemplo a seguir mostra como gravar dados em um arquivo, byte por byte e, em seguida, verifique se que os dados foram gravados corretamente.The following example shows how to write data to a file, byte by byte, and then verify that the data was written correctly.

using namespace System;
using namespace System::IO;
int main()
{
   String^ fileName =  "Test@##@.dat";
   
   // Create random data to write to the file.
   array<Byte>^dataArray = gcnew array<Byte>(100000);
   (gcnew Random)->NextBytes( dataArray );
   FileStream^ fileStream = gcnew FileStream( fileName,FileMode::Create );
   try
   {
      
      // Write the data to the file, byte by byte.
      for ( int i = 0; i < dataArray->Length; i++ )
      {
         fileStream->WriteByte( dataArray[ i ] );

      }
      
      // Set the stream position to the beginning of the file.
      fileStream->Seek( 0, SeekOrigin::Begin );
      
      // Read and verify the data.
      for ( int i = 0; i < fileStream->Length; i++ )
      {
         if ( dataArray[ i ] != fileStream->ReadByte() )
         {
            Console::WriteLine( "Error writing data." );
            return  -1;
         }

      }
      Console::WriteLine( "The data was written to {0} "
      "and verified.", fileStream->Name );
   }
   finally
   {
      fileStream->Close();
   }

}

using System;
using System.IO;

class FStream
{
    static void Main()
    {
        const string fileName = "Test#@@#.dat";

        // Create random data to write to the file.
        byte[] dataArray = new byte[100000];
        new Random().NextBytes(dataArray);

        using(FileStream  
            fileStream = new FileStream(fileName, FileMode.Create))
        {
            // Write the data to the file, byte by byte.
            for(int i = 0; i < dataArray.Length; i++)
            {
                fileStream.WriteByte(dataArray[i]);
            }

            // Set the stream position to the beginning of the file.
            fileStream.Seek(0, SeekOrigin.Begin);

            // Read and verify the data.
            for(int i = 0; i < fileStream.Length; i++)
            {
                if(dataArray[i] != fileStream.ReadByte())
                {
                    Console.WriteLine("Error writing data.");
                    return;
                }
            }
            Console.WriteLine("The data was written to {0} " +
                "and verified.", fileStream.Name);
        }
    }
}
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Text

Class FStream

    Shared Sub Main()

        Const fileName As String = "Test#@@#.dat"

        ' Create random data to write to the file.
        Dim dataArray(100000) As Byte
        Dim randomGenerator As New Random()
        randomGenerator.NextBytes(dataArray)

        Dim fileStream As FileStream = _
            new FileStream(fileName, FileMode.Create)
        Try

            ' Write the data to the file, byte by byte.
            For i As Integer = 0 To dataArray.Length - 1
                fileStream.WriteByte(dataArray(i))
            Next i

            ' Set the stream position to the beginning of the stream.
            fileStream.Seek(0, SeekOrigin.Begin)

            ' Read and verify the data.
            For i As Integer = 0 To _
                CType(fileStream.Length, Integer) - 1

                If dataArray(i) <> fileStream.ReadByte() Then
                    Console.WriteLine("Error writing data.")
                    Return
                End If
            Next i
            Console.WriteLine("The data was written to {0} " & _
                "and verified.", fileStream.Name)
        Finally
            fileStream.Close()
        End Try
    
    End Sub
End Class

O exemplo a seguir lê o texto na direção inversa, do final do arquivo para o início do arquivo, usando as diversas SeekOrigin valores com o Seek método.The following example reads text in the reverse direction, from the end of file to the beginning of the file, by using the various SeekOrigin values with the Seek method.

using System;
using System.IO;

public class FSSeek
{
    public static void Main()
    {
        long offset;
        int nextByte;

        // alphabet.txt contains "abcdefghijklmnopqrstuvwxyz"
        using (FileStream fs = new FileStream(@"c:\temp\alphabet.txt", FileMode.Open, FileAccess.Read))
        {
            for (offset = 1; offset <= fs.Length; offset++)
            {
                fs.Seek(-offset, SeekOrigin.End);
                Console.Write(Convert.ToChar(fs.ReadByte()));
            }
            Console.WriteLine();

            fs.Seek(20, SeekOrigin.Begin);

            while ((nextByte = fs.ReadByte()) > 0)
            {
                Console.Write(Convert.ToChar(nextByte));
            }
            Console.WriteLine();
        }
    }
}
// This code example displays the following output:
//
// zyxwvutsrqponmlkjihgfedcba
// uvwxyz
Imports System
Imports System.IO

Public Class FSSeek
    Public Shared Sub Main()
        Dim offset As Long
        Dim nextByte As Integer

        ' alphabet.txt contains "abcdefghijklmnopqrstuvwxyz"
        Using fs As New FileStream("c:\temp\alphabet.txt", FileMode.Open, FileAccess.Read)

            For offset = 1 To fs.Length
                fs.Seek(-offset, SeekOrigin.End)
                Console.Write(Convert.ToChar(fs.ReadByte()))
            Next offset
            Console.WriteLine()

            fs.Seek(20, SeekOrigin.Begin)

            nextByte = fs.ReadByte()
            While (nextByte > 0)
                Console.Write(Convert.ToChar(nextByte))
                nextByte = fs.ReadByte()
            End While
            Console.WriteLine()

        End Using
    End Sub
End Class

' This code example displays the following output:
'
' zyxwvutsrqponmlkjihgfedcba
' uvwxyz

Comentários

Este método substitui Stream.Seek.This method overrides Stream.Seek.

Observação

Use o FileStream.CanSeek propriedade para determinar se a instância atual dá suporte à busca.Use the FileStream.CanSeek property to determine whether the current instance supports seeking. Para obter mais informações, consulte: Stream.CanSeek.For additional information, see Stream.CanSeek.

Você pode buscar em qualquer local além do comprimento do fluxo.You can seek to any location beyond the length of the stream. Quando você busca além do comprimento do arquivo, o tamanho do arquivo aumenta.When you seek beyond the length of the file, the file size grows. No Windows NT e versões posteriores, adicionados ao final do arquivo de dados são definidos como zero.In Windows NT and later versions, data added to the end of the file is set to zero. No Windows 98 ou versões anteriores, os dados adicionados ao final do arquivo não estão definidos como zero, o que significa que os dados excluídos anteriormente está visível no fluxo.In Windows 98 or earlier versions, data added to the end of the file is not set to zero, which means that previously deleted data is visible to the stream.

Para obter uma lista de operações de diretório e arquivos comuns, consulte tarefas comuns de e/s.For a list of common file and directory operations, see Common I/O Tasks.

Aplica-se a

Veja também