このブラウザーはサポートされなくなりました。

Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。

Microsoft Edge をダウンロードする Internet Explorer と Microsoft Edge の詳細情報
public ref class FileStream : System::IO::Stream
public class FileStream : System.IO.Stream
[System.Runtime.InteropServices.ComVisible(true)]
public class FileStream : System.IO.Stream
type FileStream = class
    inherit Stream
[<System.Runtime.InteropServices.ComVisible(true)>]
type FileStream = class
    inherit Stream
Public Class FileStream
Inherits Stream
FileStream void AddText( FileStream^ fs, String^ value ) array<Byte>^info = (gcnew UTF8Encoding( true ))->GetBytes( value ); fs->Write( info, 0, info->Length ); int main() String^ path = "c:\\temp\\MyTest.txt"; // Delete the file if it exists. if ( File::Exists( path ) ) File::Delete( path ); //Create the file. FileStream^ fs = File::Create( path ); AddText( fs, "This is some text" ); AddText( fs, "This is some more text," ); AddText( fs, "\r\nand this is on a new line" ); AddText( fs, "\r\n\r\nThe following is a subset of characters:\r\n" ); for ( int i = 1; i < 120; i++ ) AddText( fs, Convert::ToChar( i ).ToString() ); //Split the output at every 10th character. if ( Math::IEEERemainder( Convert::ToDouble( i ), 10 ) == 0 ) AddText( fs, "\r\n" ); finally if ( fs ) delete (IDisposable^)fs; //Open the stream and read it back. FileStream^ fs = File::OpenRead( path ); array<Byte>^b = gcnew array<Byte>(1024); UTF8Encoding^ temp = gcnew UTF8Encoding( true ); while ( fs->Read( b, 0, b->Length ) > 0 ) Console::WriteLine( temp->GetString( b ) ); finally if ( fs ) delete (IDisposable^)fs; using System; using System.IO; using System.Text; class Test public static void Main() string path = @"c:\temp\MyTest.txt"; // Delete the file if it exists. if (File.Exists(path)) File.Delete(path); //Create the file. using (FileStream fs = File.Create(path)) AddText(fs, "This is some text"); AddText(fs, "This is some more text,"); AddText(fs, "\r\nand this is on a new line"); AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n"); for (int i=1;i < 120;i++) AddText(fs, Convert.ToChar(i).ToString()); //Open the stream and read it back. using (FileStream fs = File.OpenRead(path)) byte[] b = new byte[1024]; UTF8Encoding temp = new UTF8Encoding(true); int readLen; while ((readLen = fs.Read(b,0,b.Length)) > 0) Console.WriteLine(temp.GetString(b,0,readLen)); private static void AddText(FileStream fs, string value) byte[] info = new UTF8Encoding(true).GetBytes(value); fs.Write(info, 0, info.Length); open System open System.IO open System.Text let addText (fs:FileStream) (value: string) = let info = UTF8Encoding(true).GetBytes value fs.Write(info, 0, info.Length); let path = @"c:\temp\MyTest.txt" // Delete the file if it exists. if File.Exists path then File.Delete path //Create the file. use fs = File.Create path addText fs "This is some text" addText fs "This is some more text," addText fs "\r\nand this is on a new line" addText fs "\r\n\r\nThe following is a subset of characters:\r\n" for i = 1 to 119 do Convert.ToChar i |> string |> addText fs //Open the stream and read it back. use fs = File.OpenRead path let b = Array.zeroCreate 1024 let temp = UTF8Encoding true let mutable readLen = fs.Read(b,0,b.Length); while readLen> 0 do printfn $"{temp.GetString(b,0,readLen)}" readLen <- fs.Read(b,0,b.Length) Imports System.IO Imports System.Text Public Class Test Public Shared Sub Main() Dim path As String = "c:\temp\MyTest.txt" ' Delete the file if it exists. If File.Exists(path) Then File.Delete(path) End If 'Create the file. Dim fs As FileStream = File.Create(path) AddText(fs, "This is some text") AddText(fs, "This is some more text,") AddText(fs, Environment.NewLine & "and this is on a new line") AddText(fs, Environment.NewLine & Environment.NewLine) AddText(fs, "The following is a subset of characters:" & Environment.NewLine) Dim i As Integer For i = 1 To 120 AddText(fs, Convert.ToChar(i).ToString()) fs.Close() 'Open the stream and read it back. fs = File.OpenRead(path) Dim b(1023) As Byte Dim temp As UTF8Encoding = New UTF8Encoding(True) Do While fs.Read(b, 0, b.Length) > 0 Console.WriteLine(temp.GetString(b)) fs.Close() End Sub Private Shared Sub AddText(ByVal fs As FileStream, ByVal value As String) Dim info As Byte() = New UTF8Encoding(True).GetBytes(value) fs.Write(info, 0, info.Length) End Sub End Class

次の例は、ファイルに非同期的に書き込む方法を示しています。 このコードは、UserInput という名前の TextBlock と、Button_Clickという名前の Click イベント ハンドラーにフックされたボタンを持つ WPF アプリで実行されます。 ファイル パスは、コンピューター上に存在するファイルに変更する必要があります。

using System; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.IO; namespace WpfApplication1 public partial class MainWindow : Window public MainWindow() InitializeComponent(); private async void Button_Click(object sender, RoutedEventArgs e) UnicodeEncoding uniencoding = new UnicodeEncoding(); string filename = @"c:\Users\exampleuser\Documents\userinputlog.txt"; byte[] result = uniencoding.GetBytes(UserInput.Text); using (FileStream SourceStream = File.Open(filename, FileMode.OpenOrCreate)) SourceStream.Seek(0, SeekOrigin.End); await SourceStream.WriteAsync(result, 0, result.Length); Imports System.IO Imports System.Text Class MainWindow Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim uniencoding As UnicodeEncoding = New UnicodeEncoding() Dim filename As String = "c:\Users\exampleuser\Documents\userinputlog.txt" Dim result As Byte() = uniencoding.GetBytes(UserInput.Text) Using SourceStream As FileStream = File.Open(filename, FileMode.OpenOrCreate) SourceStream.Seek(0, SeekOrigin.End) Await SourceStream.WriteAsync(result, 0, result.Length) End Using End Sub End Class

クラスを FileStream 使用して、ファイル システム上のファイルの読み取り、書き込み、開き、閉じ、パイプ、標準入力、標準出力など、他のファイル関連のオペレーティング システム ハンドルを操作します。 、、 Write 、および Flush の各メソッドを Read 使用して同期操作を実行するか、および FlushAsync メソッドを CopyToAsync ReadAsync WriteAsync 使用して非同期操作を実行できます。 CopyTo 非同期メソッドを使用して、メイン スレッドをブロックせずにリソースを集中的に使用するファイル操作を実行します。 このパフォーマンスに関する考慮事項は、時間のかかるストリーム操作によって UI スレッドがブロックされ、アプリが動作していないと見なされる可能性がある Windows 8.x Store アプリまたはデスクトップ アプリで特に重要です。 FileStream は、パフォーマンスを向上させるために入力と出力をバッファーに格納します。

この型は IDisposable インターフェイスを実装します。 型の使用が完了したら、直接的または間接的に型を破棄する必要があります。 直接的に型を破棄するには、 try / catch ブロック内で Dispose メソッドを呼び出します。 間接的に型を破棄するには、 using (C# の場合) または Using (Visual Basic 言語) などの言語構成要素を使用します。 詳細については、 IDisposable インターフェイスに関するトピック内の「IDisposable を実装するオブジェクトの使用」セクションを参照してください。

プロパティは IsAsync 、ファイル ハンドルが非同期的に開かれたかどうかを検出します。 、、または options パラメーターを持つコンストラクターを使用して クラスの FileStream インスタンスを作成するときに、この値を isAsync useAsync 指定します。 プロパティが の場合、ストリームは true 重複した I/O を使用してファイル操作を非同期的に実行します。 ただし、 プロパティは IsAsync 、または CopyToAsync メソッドを WriteAsync ReadAsync 呼び出す必要 true はありません。 プロパティが IsAsync false 、非同期の読み取りおよび書き込み操作を呼び出しても、UI スレッドはブロックされませんが、実際の I/O 操作は同期的に実行されます。

メソッドは Seek 、ファイルへのランダム アクセスをサポートします。 Seek を使用すると、読み取り/書き込み位置をファイル内の任意の位置に移動できます。 これは、バイト オフセット参照ポイント パラメーターを使用して行われます。 バイト オフセットは、列挙型の 3 つのメンバーによって表される、基になるファイルの先頭、現在の位置、または末尾であるシーク参照ポイントに対する SeekOrigin 相対位置です。

ディスク ファイルは常にランダム アクセスをサポートします。 構築時に、プロパティ値 CanSeek は、基になるファイルの種類に応じて または false true 設定されます。 winbase.h で定義されているように、基になるファイルの種類がFILE_TYPE_DISKの場合、プロパティの CanSeek 値は です true 。 それ以外の場合、プロパティ値 CanSeek は です false

ファイルの一部がロックされた状態でプロセスが終了するか、未処理のロックを持つファイルを閉じると、動作は未定義になります。

ディレクトリ操作とその他のファイル操作については、および Path クラスを File Directory 参照してください。 File クラスは、主にファイル パスに基づいてオブジェクトを作成 FileStream するための静的メソッドを持つユーティリティ クラスです。 クラスは MemoryStream バイト配列からストリームを作成し、 クラスに似ています FileStream

一般的なファイル操作とディレクトリ操作の一覧については、「 一般的な I/O タスク 」を参照してください。

ストリーム位置の変更の検出

オブジェクトがそのハンドルを FileStream 排他的に保持していない場合、別のスレッドが同時にファイル ハンドルにアクセスし、ファイル ハンドルに関連付けられているオペレーティング システムのファイル ポインターの位置を変更できます。 この場合、オブジェクト内の FileStream キャッシュされた位置とバッファー内のキャッシュされたデータが侵害される可能性があります。 オブジェクトは FileStream 、キャッシュされたバッファーにアクセスするメソッドに対して定期的にチェックを実行し、オペレーティング システムのハンドル位置が オブジェクトで FileStream 使用されるキャッシュされた位置と同じであることを確認します。

メソッドの呼び出し Read でハンドル位置の予期しない変更が検出された場合、.NET Frameworkはバッファーの内容を破棄し、ファイルからストリームをもう一度読み取ります。 これは、ファイルのサイズや、ファイル ストリームの位置に影響を与える可能性があるその他のプロセスによっては、パフォーマンスに影響を与える可能性があります。

メソッドの呼び出し Write でハンドル位置の予期しない変更が検出された場合、バッファーの内容は破棄され、 IOException 例外がスローされます。

FileStream ハンドルを公開するために プロパティにアクセスするか SafeFileHandle 、オブジェクトにコンストラクターに プロパティが指定 SafeFileHandle されている場合、オブジェクトはハンドル FileStream を排他的に保持しません。

現在のストリームを閉じ、現在のストリームに関連付けられているすべてのリソース (ソケット、ファイル ハンドルなど) を解放します。 このメソッドを呼び出す代わりに、ストリームが適切に破棄されていることを確認します。

(継承元 Stream )

指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、指定されたキャンセル トークンを使用して、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream )

指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream )

指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、指定されたバッファー サイズとキャンセル トークンを使用して、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream )