windows - Undgå at opdatere sidste adgangsdato/-tid ved læsning af en fil

Indlæg af Hanne Mølgaard Plasc

Problem



Vi bygger en Windows-baseret applikation, der krydser en katalogstruktur rekursivt, leder efter filer, der opfylder bestemte kriterier og derefter gør en del behandling på dem. For at afgøre, om en bestemt fil skal behandles eller ej, skal vi åbne den fil og læs noget af indholdet.


Denne tilgang ser ud til at være god i princippet, men nogle kunder, der tester en tidlig version af ansøgningen, har rapporteret, at det ændrer den sidste adgangstid for mange af deres filer (ikke overraskende, da de faktisk har adgang til filerne). er et problem for disse kunder, fordi de har arkivpolitikker baseret på de seneste adgangstider for filer (fx de arkiverer filer, der ikke er blevet åbnet i de seneste 12 måneder). Fordi vores applikation er planlagt til at køre hyppigere end arkivet ' vindue 'forhindrer vi effektivt, at nogen af ​​disse filer nogensinde bliver arkiveret.


Vi forsøgte at tilføje nogle kode for at gemme hver fils sidste adgangstid før du læste den, og derefter skrive den tilbage efterpå (hæslig, jeg ved), men det forårsagede problemer for en anden kunde, der foretog inkrementale backups baseret på en filsystemtransaktionslog. Vores eksplicitte indstilling af den sidste adgangstid på filer forårsager, at disse filer inkluderes i hver inkremental backup, selv om de ikke har ændret sig.


Så her er spørgsmålet: Er der nogen som helst måde i et Windows-miljø, at vi kan læse en fil uden at den seneste adgangstid bliver opdateret?


Tak på forhånd!


EDIT: På trods af 'ntfs' -mærket kan vi faktisk ikke regne med, at filsystemet er NTFS. Mange af vores kunder driver vores applikation over et netværk, så det kan være næsten alt i den anden ende.

Bedste reference


Dokumentationen viser, at du kan gøre dette, selvom jeg aldrig har prøvet det selv. [1]



  For at bevare den eksisterende sidste adgangstid for en fil, selv efter at have fået adgang til en fil, skal du ringe til SetFileTime umiddelbart efter åbningen af ​​filhåndtaget med disse parametre 's FILETIME struktur medlemmer initialiseret til 0xFFFFFFFF.


Andre referencer 1


Fra Vista fortsætter NTFS ikke den sidste adgangstid som standard. For at aktivere dette, se http://technet.microsoft.com/en-us/library/cc959914.aspx [2]


At starte NTFS-transaktion og rullende tilbage er meget dårlig, og forestillingen bliver forfærdelig.


Du kan også gøre det


FSUTIL adfærdssæt disablelastaccess 0

Andre referencer 2


Jeg ved ikke, hvad dine kunders minimumskrav er, men har du prøvet NTFS Transactions? På skrivebordet var det første OS, der understøtter det, Vista, og på serveren var det Windows Server 2008. Men det kan være værd at se på.


Start en NTFS-transaktion, læs din fil, tilbagekald transaktionen. Enkel! :-). Jeg har faktisk ikke kendskab til , hvis det vil rulle tilbage til den sidste adgangstid selv. Du bliver nødt til at teste det selv.


Her er et link til en MSDN Magazine-artikel om NTFS-transaktioner, som indeholder andre links. http://msdn.microsoft.com/en-us/magazine/cc163388.aspx[3]


Håber det hjælper.