2

異なるファイルから異なる情報を収集する2つのファイルストリームがあります。

FileStream dataStruc = new FileStream("c:\\temp\\dataStruc.txt", FileMode.Create, FileAccess.ReadWrite);

FileStream csvFile = new FileStream("c:\\temp\\" + fileName + ".txt", FileMode.Create, FileAccess.ReadWrite);

StreamWriter sw = new StreamWriter(csvFile);
StreamWriter swc = new StreamWriter(dataStruc);

以下に示すように、両方のストリームライターを使用して同じ情報を取得する場合:

sw.WriteLine(sheet); 
swc.WriteLine(sheet);

次に、swstreamwriterはファイルから情報を取得します。ファイルストリームを正しく設定していませんか?

4

2 に答える 2

2

例外/エラーが発生せず、csvFileFileStreamの正しいパスなどの基本的なものが検証され、正しいことが判明したと仮定します。Flush()を使用してストリームを追加するか、適切に閉じてみてくださいClose()。さらに良い:usingステートメントを使用します。

編集
もう一度質問を読んだ後:ファイルストリームを切り替えなかっただけですか?

StreamWriter sw = new StreamWriter(csvFile);
StreamWriter swc = new StreamWriter(dataStruc);

とは対照的に

StreamWriter sw = new StreamWriter(dataStruc);
StreamWriter swc = new StreamWriter(csvFile);

あなたの質問と説明はかなり曖昧です:「両方のストリームライターは同じ情報を取得するために使用されます」。ストリームライターを使用し情報を取得するにはどうすればよいですか?また:「swstreamwriterにはファイルからの情報があります」:より具体的に教えてください。これは意味がありません。

どんな場合でも; デバッガルークを使用してください!

于 2012-07-18T15:24:41.347 に答える
0

両方のStreamWriterによるファイルへの同時アクセスが競合していると思います。

でストリームを開きますFileMode.CreateMSDNのドキュメントを参照してください(私によるハイライト):

オペレーティングシステムが新しいファイルを作成する必要があることを指定します。ファイルがすでに存在する場合は、上書きされます。この操作には、FileIOPermissionAccess.Write権限が必要です。System.IO.FileMode.Createは、ファイルが存在しない場合はCreateNewを使用するように要求するのと同じです。それ以外の場合は、Truncateを使用します

StreamWriter初期化の順序に応じて、2番目のファイルが最初のファイルを上書きするのStreamWriterか、単に失敗するのかはわかりません。いずれにせよ、彼らは相反する仕事を試みます。

可能な解決策:

  • たとえば、 usingブロックを使用して、2番目のストリームがファイルにアクセスする前に最初のストリームを閉じるなどして、ストリームが次々にファイルにアクセスするようにします。
  • FileMode可能であれば、既存のファイルが上書きされないように、ストリームのを変更します。(上記のドキュメントを参照してください。)
于 2012-07-18T15:36:45.053 に答える