私のコードはかなり簡単です。それは、テキストファイルにデータを書き込むためのStringBuilderとFileStreamを使用して、[オプションとして]表示用にテキストファイルが開きます:ストリームがファイルに書き込むのを待ってから読み込みます。
public async Task ExportData(data)
{
var sb = new StringBuilder();
sb.AppendLine(BuildStringFromData());
var dir = [email protected]"C:\Ortund\xExports\{DateTime.Now.Date.ToString
("yyyy-MM-dd", CultureInfo.InvariantCulture)}";
var fullPath = [email protected]"{dir}\{filename}.txt";
var stream = new FileStream(fullPath, FileMode.CreateNew, FileAccess.ReadWrite);
var bytes = Encoding.UTF8.GetBytes(sb.ToString());
await stream.WriteAsync(bytes, 0, bytes.Length);
if (MessageBox.Show("Open the file?", "Open?", MessageBoxButton.YesNo)
== MessageBoxResult.Yes)
{
System.Diagnostics.Process.Start(fullPath);
}
}
を私はこれが、この特定の実行を一時停止するだろうと考え、ファイルストリームに書き込みを待っていましたメソッドは、すべてのバイトが書き込まれるまで起こっていません。
何が起こっているのかは、ファイルを開くためのプロンプトがすぐに表示され、開いたときにその空白が表示されることです。 Notepad ++は数秒後にファイルに変更が加えられたことを通知し、エクスポートしたデータが表示されたときにリロードするかどうかを尋ねます。
ファイルデータが完全に書き込まれるまで実行を待機させてから、ユーザーにファイルを開くように要求するにはどうすればよいですか?
'WriteAsync()'の代わりに 'Write()'メソッドを呼び出します。 –
@MichałTurczyn私はそれを最初に試みた。ふつうは違う – Ortund
次に、ストリームを閉じる必要があります... –