2009-11-11 2 views
43

C#では、ファイルの内容を変更せずにファイルが変更されたように見える(つまり、最終更新日時)ようにする最も簡単で安全な方法は何ですか?C#でファイルに触れるには?

+0

ファイルを開いてファイルを保存できませんでしたか? –

答えて

59
System.IO.File.SetLastWriteTimeUtc(fileName, DateTime.UtcNow); 
+2

残念ながら、これはまだ存在しないファイルを作成しません。 –

+0

@EdwardNedHarveyそれはまったく問題ではありません。 if(!System.IO.File.Exists(fileName)) System.IO.File.Create(fileName); System.IO.File.SetLastWriteTimeUtc(fileName、DateTime.UtcNow); – vchyzhevskyi

+5

@coirius FYI ... File.Createによって作成されたストリームを確実に閉じたいと思うでしょう。 –

2

System.IO.File.SetLastWriteTimeUtcとあなたのソリューションは、ファイルが使用中の場合は、ファイルを触らせません。使用中のファイルに触れる "ハッピーな"方法は、あなた自身のtouch.batを作成することです(WindowsはLinuxのようなものを持っていないので)\ windows \ system32にドロップすることで、完全なパスを指定することなくどこでも。

touch.batの内容は、(おそらくあなたは、これが私のために働いた、一時ファイルを使用せず、より良いそれを行うことができます)、次のようになります。


type nul > nothing.txt 
copy /B /Y nothing.txt+%1% > nul 
copy /B /Y nothing.txt %1% > nul 
del nothing.txt 

EDIT:次のプロパティがオンに設定することができますロックされたファイル:new FileInfo(filePath).LastWriteTime

+1

'%windir%\ system32'に何かを置くべきではありません。代わりに 'PATH'環境変数を変更して、そこに置くパスを含めてください。 – Joey

1

これは機能します。 DirectoryNotFoundException、およびFile.Open()によってスローされたさまざまな例外をスローできます。

public void Touch(string fileName) 
{ 
    FileStream myFileStream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
    myFileStream.Close(); 
    myFileStream.Dispose(); 
    File.SetLastWriteTimeUtc(fileName, DateTime.UtcNow); 
} 
関連する問題