2016-03-25 42 views
1

Bir günlüğe kaydetme çözümüm var ve uygulama başladığında açık olan bir metin dosyasına yazıyorum. Dosyaya yazmak için StreamWriter kullanıyorum. Benim logger kodu basitçe (Akışı açmak için yazma) 'dir:Date Modified güncellenmiyor Güncelleniyor StreamWriter açık

public void Open(string filePath, bool append) 
    { 
     if (this.logWriter != null) 
      throw new InvalidOperationException(
       "Logger is already open"); 

     if (!Directory.Exists(Path.GetDirectoryName(filePath))) 
      Directory.CreateDirectory(Path.GetDirectoryName(filePath)); 

     this.logWriter = new StreamWriter(filePath, append); 
     this.logWriter.AutoFlush = true; 
    } 

public void CreateEntry(string entry) 
    { 
     if (this.logWriter == null) 
      return; 

     this.logWriter.WriteLine(entry); 

    } 

Sorun dosyaya yazarken, girdileri dosya boyutu değişiyor, yazılmış ama "Modifiye tarihi" özelliğini değişmez olmasıdır. Düşüncesi olan var mı? Değişiklik tarihini el ile nasıl güncelleyebilirim?

PS: Ben Windows 7

cevap

2

FindNextFile tarafından döndürülen değiştirilme tarihi dizin girişinde depolanan önbelleğe değerdir üzerine değilim, değil MFT kaydı (inode eşdeğeri) saklanan her zaman güncel değer. Bu performans nedenlerinden dolayı, tüm bir dizin için bilgi her dosya için okunmak yerine tek bir okuma ile elde edilebilir.

dosyaya bir tanıtıcı kapatıldığında O güncellenir. *

Hep alabilirsiniz yukarı güncel bilgileri GetFileInformationByHandle veya GetFileInformationByHandleEx kullanarak. Bu işlevi kullanmak için, ne okuma, yazma erişimi ve paylaşıma izin vermeden, CreateFile kullanarak dosyayı açmalısınız.

HANDLE hFile = CreateFile(_T("Path/To/File"), 
    0, // No read or write access needed 
    FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 
    NULL, 
    OPEN_EXISTING, // Don't create 
    0, NULL); 

Bu tanıtıcı sonra GetFileInformationByHandleEx ile kullanılabilir.

Alternatif olarak, yalnızca bu tanıtıcıyı kapatmak, geçerli değerleri yansıtmak için dizin girişini güncelleyecektir.

ayrıntılı bir açıklama için

* (bu isimle içinden açıldı bir tanıtıcı kapatıldığında bir dosya birden çok fiziksel bağlantı içerebilir beri, doğru olmak.)

+0

Teşekkür –