ファイルを作成し、別のプロセスがそのファイルのロックを取得することを許さずにLast Write Time(およびその他のタイムスタンプ情報)を設定する方法があるかどうかを知りたいこれら2つの操作。ファイルを作成してからファイルロックを解除せずにタイムスタンプを設定する
私がこれをやりたいのは、ウイルス対策ソフトウェアがファイルの作成直後にロックを取得し、ファイル属性を設定しようとするまでにロックを保持するという問題を修正することです。具体的には、私が作業しているコードはSevenZipSharpです(私が見る限り、これ以上維持されません)。この問題を再現
コードは次のとおりです。
var filePath = "test.txt";
using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite))
{
var bytes = Encoding.ASCII.GetBytes("Hello fail.");
fileStream.Write(bytes, 0, bytes.Length);
var fileInfo = new FileInfo(filePath);
fileInfo.CreationTime = DateTime.Now;
}
最後の文を実行するときにこれが次の例外を生成します。 System.IO.IOException 「プロセスはファイルにアクセスできません「C:\ test.txtのを'それは別のプロセスで使用されているためです。
私は再試行メカニズムで時間属性の設定を実装することを検討していますが、より洗練されたソリューションがあるかどうか疑問に思っています。
なぜ* "別のプロセスが" * "の間にファイルへのロックを取得することを許可しないのですか?後で時間を変更できないのはなぜですか? – Sinatr
のように、アンチウイルスソフトウェアが攻撃して改ざんを防止していますか? –
fileStream.Dispose()の後にCreationTimeを変更できます。しかし、間にはありません。 –