2012-04-03 27 views
6

Aracın kullanıcısı tarafından belirtilen bir zaman aralığı içinde günlük dosyaları toplamak için bir araç yazdım. Şimdiye kadar, log dosyalarındaki File.GetLastWriteTime yöntemini kullanarak log dosyalarını derlemeyi temel alarak, bu karşılaştırmaların sonucuna göre kullanıcının girdiği ve topladığı zamanları karşılaştırdım. İşte küçük bir kod parçacığı geçerli: File.GetLastWriteTime, 'out of date' değerini döndürüyor görünüyor '

DateTime logFileEnd = File.GetLastWriteTime(matchingActiveLogFile); 

Ancak ben bunu yapmalıydım düşünce bazı günlük dosyalarını toplamak daha hiç benim aracı fark etti. Bu yöntemin döndürdüğü DateTime'ın güncel olmadığı görülüyor, (dosyada bu tarihin değerinden daha yeni kayıtlar var).

Söz konusu dosyanın 'Tarih Değiştirme' bölümüne baktığımda, 'tarihin dışında' olduğu için dosyada 'Tarih Değiştirme'den daha yeni bir günlüğe kaydetme var.

Doğru bir 'GetLastWriteTime' veya Tarih Değiştirilmiş değeri nasıl alabilirim?

+0

Ne demek istiyorsun * Bu yöntemin döndürdüğü DateTime tarihi geçmişti *? – V4Vendetta

+1

tarihi bir süre sonra güncellenmiyor mu? Örneğin, değiştirilen tarihin “tarihi geçmiş” olduğunu gördüğünüzde, bekleyin ~ 30 saniye sonra tekrar tarihi kontrol edin. – Reniuz

+1

Ayrıca bu makaleyi okuyun: http://blogs.technet.com/b/asiasupp/archive/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file- without-closing-it.aspx, aynı – Reniuz

cevap

9

Deneyimlerim sırasında sizinki gibi birkaç sorunu atmaya başladım. işlevini yerine getiren WindowsVista/7 sistemlerinde her zaman güvenilir bir sonuç döndürmez.

Bir süre sonra biz bu bağlantıyı bulundu: Disabling Last Access Time in Windows Vista to improve NTFS performance

ve "güçlü anahtar" olamaz anlıyoruz. Bu sorunu çözmek için, sadece "FileName_yyyymmdd" Bazı alanda, veya içinde bu dosya gibi

GetLastWriteTime 

çağrı geçişi durdurmak, ancak dosyanın veya adının son değişti değerini depolar.

.NET FileInfo.LastWriteTime & FileInfo.LastAccessTime are wrong

de senin durumunda yararlı olabilir: burada bulabilirsiniz GetLastAccessTime için başka çözüm yok

.

Bu konuyla ilgili genel düşüncem şunlar olurdu: bu parametreyi aktarmayın, ancak mimarinizde başka bir şey icat etmeyin.

İyi şanslar

+3

yaşamanız olabilir, dosya oluşturma tarihi ile baş ağrım vardı. dosya oluşturursanız siliniz ve tekrar oluşturun (aynı adla) yaratma tarihi önceden oluşturulmuş dosya olacaktır. Bir süre sonra, 15 saniye boyunca dosya yeniden oluşturulduğunda işletim sisteminin önbellekten geri yüklendiğini tespit ettim. Çözüm, her zaman, adı istediğiniz gibi dosya adını değiştirdi. – Reniuz

+1

@Reniuz: tanıdık geliyor :) Infact, tamamen farklı ülkelerde/kültürlerde çok fazla müşterimiz olduğu için, WindowsXp -> Windows7 64 bit, bu gibi güvenilir olmayan bilgiler kesinlikle kabul edilemezdi. – Tigran

1

Tigran haklı:

Geçen yazma süresine ek olarak dosya boyutu değişiklikleri karşılaştırmak için deneyebilirsiniz. Yaptığım şey (FileSystemWatcher ile fakat bir zaman penceresi içindeki alanları karşılaştırmak gibi).

+0

Eric için teşekkürler! Bunu daha önce hiç düşünmemiştim! – DukeOfMarmalade

İlgili konular