【C#】filestreamは既存ファイルに上書きできないのか?
zipファイルを読み込み、中身のxmlファイルの内容を編集してzipファイルを保存するソフトを作っています。その中で、「多重起動できて、同じファイルを開いたときは2つ目以降は編集できないように、異なるファイルは編集できるように」という要望があったため、filestreamを用いて開いているファイルの判断を行い、filestreamで保存するようにしました。
削除が保存できていない?
新しいxmlファイルを作る処理があり、その処理をした後一旦保存。その後削除してファイルを確認すると、削除したはずのファイルが削除されていません。
パスワードが変更される?
今回のzipファイルにはパスワードをかけていたのですが、そのパスワードが変更されていました。
奇怪な動作の理由
filestreamは、上書きをする処理がStreamWriterとは異なるようです。filestreamとして確保した長さより短いデータだと、既存のデータが残るようです。よって、StreamWriterを用いたいのですが、ファイルロックを使いたいのであればfilestreamを用いる必要があります。
解決策
fileStream.SetLength(0);
これを使うと正常にできるようになりました。filestreamの長さを強制的に0に設定することによって、常にfilestreamより長いデータである状況にしています。ほかの良い方法があるかもしれないので、調べていきます。