FileStream.Seek(Int64, SeekOrigin) メソッド

定義

このストリームの現在位置を特定の値に設定します。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

パラメーター

offset
Int64

シークの開始位置を示す、origin に対する相対ポイント。The point relative to origin from which to begin seeking.

origin
SeekOrigin

SeekOrigin 型の値を使用して、offset の参照ポイントとして先頭、末尾、または現在位置を指定します。Specifies the beginning, the end, or the current position as a reference point for offset, using a value of type SeekOrigin.

戻り値

ストリームの新しい位置。The new position in the stream.

例外

I/O エラーが発生しました。An I/O error occurred.

ストリームがシークをサポートしていません。たとえば、FileStream がパイプまたはコンソール出力から構築されました。The stream does not support seeking, such as if the FileStream is constructed from a pipe or console output.

シークがストリームの開始前に試行されています。Seeking is attempted before the beginning of the stream.

ストリームが閉じた後でメソッドが呼び出されました。Methods were called after the stream was closed.

次の例は、データをバイト単位でファイルに書き込み、データが正しく書き込まれたことを確認する方法を示しています。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 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

次の例では、Seek メソッドでさまざまな SeekOrigin 値を使用して、ファイルの末尾からファイルの先頭までの逆方向にテキストを読み取ります。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.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

注釈

このメソッドは、Stream.Seek をオーバーライドします。This method overrides Stream.Seek.

注意

現在のインスタンスがシークをサポートしているかどうかを確認するには、FileStream.CanSeek プロパティを使用します。Use the FileStream.CanSeek property to determine whether the current instance supports seeking. 詳細については、「Stream.CanSeek」を参照してください。For additional information, see Stream.CanSeek.

ストリームの長さを超えて、任意の場所をシークできます。You can seek to any location beyond the length of the stream. ファイルの長さを超えてシークすると、ファイルサイズが大きくなります。When you seek beyond the length of the file, the file size grows. Windows NT 以降のバージョンでは、ファイルの末尾に追加されたデータは0に設定されます。In Windows NT and later versions, data added to the end of the file is set to zero. Windows 98 以前のバージョンでは、ファイルの末尾に追加されたデータが0に設定されていません。これは、以前に削除されたデータがストリームに表示されることを意味します。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.

一般的なファイルおよびディレクトリ操作の一覧については、「一般的な I/o タスク」を参照してください。For a list of common file and directory operations, see Common I/O Tasks.

適用対象

こちらもご覧ください