2009-11-11 13 views
43

In C#, qual è il modo più semplice/più sicuro/più breve per visualizzare un file come se fosse stato modificato (ovvero la sua ultima data di modifica) senza modificare il contenuto del file?Come toccare un file in C#?

+0

Impossibile aprire il file e salvare il file? –

risposta

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

Sfortunatamente, questo non creerà un file che non esiste già. –

+0

@EdwardNedHarvey non è affatto un problema: if (! System.IO.File.Exists (fileName)) System.IO.File.Create (fileName); System.IO.File.SetLastWriteTimeUtc (fileName, DateTime.UtcNow); – vchyzhevskyi

+5

@coirius FYI ... Dovrai assicurarti di chiudere lo stream creato da File.Create. –

2

La vostra soluzione con System.IO.File.SetLastWriteTimeUtc non ti consente di toccare il file, se il file è in uso. Un modo "hacky" per toccare un file che è in uso sarebbe creare il proprio touch.bat (poiché Windows non ne ha uno come Linux) e rilasciarlo su \ windows \ system32, in modo da poterlo richiamare da ovunque senza specificare un percorso completo.

Il contenuto del touch.bat sarebbe allora (probabilmente si può fare meglio senza un file temporaneo, questo ha funzionato per me):


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

EDIT: La proprietà seguente può essere impostato su un file bloccato: new FileInfo(filePath).LastWriteTime

+1

Non si dovrebbe mai mettere qualcosa in '% windir% \ system32'. Invece dovresti modificare la variabile di ambiente 'PATH' per includere il percorso in cui lo inserisci. – Joey

1

Questo funziona. Potrebbe lanciare DirectoryNotFoundException e varie altre eccezioni generate da 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); 
}