teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

解説追加

2020/02/08 10:01

投稿

hihijiji
hihijiji

スコア4152

answer CHANGED
@@ -1,4 +1,17 @@
1
1
  CsvWriterで書き込むところでもFileStreamを使って、FileStreamを閉じる前に [Flush(true)](https://docs.microsoft.com/ja-jp/dotnet/api/system.io.filestream.flush?view=netframework-4.8#System_IO_FileStream_Flush_System_Boolean_) を呼んでみてください。
2
2
  ストレージのキャッシュの問題ならそれで解決するかもしれません。
3
3
 
4
- それでだめなら、文字通りファイルがセキュリティソフトなど別のプロセスで使用されていて開けない可能性もあります。
4
+ それでだめなら、文字通りファイルがセキュリティソフトなど別のプロセスで使用されていて開けない可能性もあります。
5
+
6
+ ** [解説] **
7
+ 上でストレージのキャッシュとぼんやりとした表現を書きましたが、幾通りもあります。
8
+ 1.SSDやHDDなどに搭載されているキャッシュメモリ
9
+ 2.ディスクコントローラなどが搭載または占有しているキャッシュメモリ
10
+ 3.OSに搭載されている遅延書き込み機能(ディスクキャッシュ)
11
+ 4.Framework が間接的に利用するAPIの書き込みバッファ
12
+ 5.StreamWriter や CsvWriter が持っている(かもしれない)書き込みバッファ
13
+
14
+ このうち1と2は無関係です。
15
+ 5は(4も多分) using を抜けた時点でFlushされます。
16
+ 消去法で3が怪しくなります。
17
+ これをFlushする機能を持っているのが FileStream なのです。