FileStream.Close メソッド
ファイルを閉じ、現在のファイル ストリームと関連付けられたリソースを解放します。
Overrides Public Sub Close()
[C#]
public override void Close();
[C++]
public: void Close();
[JScript]
public override function Close();
例外
例外の種類 | 条件 |
---|---|
IOException | ストリームを閉じようとしている間にエラーが発生しました。 |
解説
このメソッドは、 Close をオーバーライドします。
この Close の実装は、 true 値を渡す Dispose メソッドを呼び出します。
以前にバッファに書き込まれたデータは、ファイル ストリームが閉じられる前に、ファイルにコピーされます。したがって、 Close を呼び出す前に Flush を呼び出す必要はありません。 Close を呼び出した後に、そのファイル ストリームを操作しようとすると例外が発生することがあります。 Close を 1 回呼び出した後に、再び呼び出しても何も実行されません。
ストリームをフラッシュしても、 Flush または Close を明示的に呼び出さない限り、そのストリームの基になるエンコーダはフラッシュされません。 AutoFlush を true に設定すると、データがバッファからストリームにフラッシュされますが、エンコーダの状態はフラッシュされません。これにより、エンコーダの状態 (一部の文字) を維持できるため、次のブロックの文字を正確にエンコードできるようになります。この動作は、一部の文字をエンコードするためにはエンコーダがあらかじめその文字に隣接する文字を受け取っておく必要がある UTF8 および UTF7 に対して有効です。
Finalize メソッドは、 Close を呼び出して、ガベージ コレクタがオブジェクトを終了する前にファイル ストリームを閉じます。ただし、 StreamWriter などの FileStream に書き込むオブジェクトは、 Finalize の呼び出しによってストリームを閉じるときに、内部バッファのデータを FileStream にフラッシュしていないことがあります。データの損失を防ぐために、常に最上位オブジェクトで Close を呼び出してください。
ファイルの一部がロックされた状態でプロセスが終了した場合、またはロックが保留されているファイルを閉じた場合の動作は未定義です。
メモ このバージョンの Close は、 disposing パラメータを true に設定した Dispose と等価です。
使用例
[Visual Basic, C#, C++] 次のコード例は System.IO.FileStream.FileStream4 の例の一部です。
Private Shared Sub EndReadCallback(asyncResult As IAsyncResult)
Dim tempState As State = _
DirectCast(asyncResult.AsyncState, State)
Dim readCount As Integer = _
tempState.FStream.EndRead(asyncResult)
Dim i As Integer = 0
While(i < readCount)
If(tempState.ReadArray(i) <> tempState.WriteArray(i))
Console.WriteLine("Error writing data.")
tempState.FStream.Close()
Return
End If
i += 1
End While
Console.WriteLine("The data was written to {0} and " & _
"verified.", tempState.FStream.Name)
tempState.FStream.Close()
' Signal the main thread that the verification is finished.
tempState.ManualEvent.Set()
End Sub
[C#]
static void EndReadCallback(IAsyncResult asyncResult)
{
State tempState = (State)asyncResult.AsyncState;
int readCount = tempState.FStream.EndRead(asyncResult);
int i = 0;
while(i < readCount)
{
if(tempState.ReadArray[i] != tempState.WriteArray[i++])
{
Console.WriteLine("Error writing data.");
tempState.FStream.Close();
return;
}
}
Console.WriteLine("The data was written to {0} and verified.",
tempState.FStream.Name);
tempState.FStream.Close();
// Signal the main thread that the verification is finished.
tempState.ManualEvent.Set();
}
[C++]
static void EndReadCallback(IAsyncResult* asyncResult)
{
State* tempState =
dynamic_cast<State*>(asyncResult->AsyncState);
int readCount = tempState->FStream->EndRead(asyncResult);
int i = 0;
while(i < readCount)
{
if(tempState->ReadArray[i] != tempState->WriteArray[i++])
{
Console::WriteLine(S"Error writing data.");
tempState->FStream->Close();
return;
}
}
Console::WriteLine(S"The data was written to {0} "
S"and verified.", tempState->FStream->Name);
tempState->FStream->Close();
// Signal the main thread that the verification is finished.
tempState->ManualEvent->Set();
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
参照
FileStream クラス | FileStream メンバ | System.IO 名前空間 | 入出力操作 | ファイルからのテキストの読み取り | ファイルへのテキストの書き込み