2011-02-09 8 views
2

ファイルを読み込んでデータベースに挿入するアプリケーションを使用しています。何らかの理由で、作成時間を特定の時間に設定します。ファイルを作成するときに、作成時間を変更する前にアプリケーションがファイルを選択します。とにかく、作成時間を変更するまでファイルをロックすることができるのですか?C#ファイルをロックする方法

ファイルが他のプロセスで使用されているか、ファイルがアーカイブされるよう、私は取得していますエラーがFile.SetCreationTimeです。

//Copy signal file 
s = filePath + "s"; 
newS = targetFullPath2 + "s"; 
File.Copy(s, newS, true); 
// 
//new creation ts 
dtFileCreation = File.GetCreationTime(s); 
//retain creation time 
File.SetCreationTime(newS, dtFileCreation); 

アドバイスをしてください。

+0

コード上のC#のロックを使用して、作業をdoesnot。 –

+3

'lock'キーワードはファイルをロックすることとは関係がないので、その理由があります。その機能はスレッド同期に関するものです。 –

答えて

4

これに対する一般的な解決策は、ファイルを作成(およびそのタイムスタンプを設定する)別のディレクトリまたは別の名前で最初にして、他のプロセスがそれを拾うことができますので、それは準備ができたときにそれを移動したり名前を変更することです。移動/名前の変更は、NTFSのアトミック操作です(もちろん、ファイルを別々のパーティションに移動しない限り)。例えば

s = filePath + "s"; 
newS = targetFullPath2 + "s"; 
File.Copy(s, newS + "_", true); // add the _ so the other process 
            // doesn’t “see” the file yet 

dtFileCreation = File.GetCreationTime(s); 
File.SetCreationTime(newS + "_", dtFileCreation); 

// We’re done with the file, now rename it to its intended final name 
File.Move(newS + "_", newS); 
+0

ありがとうございました。あなたは私の一日を救った。 –

1

このエラーは、誰か(あなたまたは他のプログラムかもしれない)がファイルをロックしていることを示しています。したがって、私はあなたの問題を解決するファイルをロックするとは思わない。どのようなファイルですか?あなたのコードはファイルを読み込んでいて、終了後にストリームを閉じるのを忘れていますか?

関連する問題