tengo un escenario siguiente:de Windows sistema de archivos: Hora de creación de un archivo no cambia cuando se elimina tiempo y crea de nuevo
1: Crear un montón de archivos
2: Call alguna aplicación externa que procesa todos los archivos con el tiempo diferentes creación desde la última instantánea
3: Eliminar archivos
4: Goto 1
Resultó que las ventanas no garantiza que va a cambiar el tiempo de creación cuando el usuario crea un archivo, lo borra y que crea un archivo con un mismo nombre.
escribí un pequeño script de PowerShell que verifica lo siguiente:
ls | Remove-Item
$fileListOld = @{}
foreach($i in 1..1000)
{
$fname = [string]::Format("{0}.txt", $i)
"tst" >> $fname
}
ls | % { $fileListOld[$_.Name] = $_ }
ls | Remove-Item
foreach($i in 1..1000)
{
$fname = [string]::Format("{0}.txt", $i)
"tst" >> $fname
}
$fileListNew = @{}
ls | % { $fileListNew[$_.Name] = $_ }
$count = 0
foreach ($fname in $fileListNew.Keys)
{
if ($fileListNew[$fname].CreationTimeUtc -eq $fileListOld[$fname].CreationTimeUtc)
{
Write-Host Same creation time -ForegroundColor Red
Write-Host $fname -ForegroundColor Red
$count++
}
}
Write-Host $count
Salida:
...
...
Same creation time
241.txt
Same creation time
944.txt
Same creation time
908.txt
Same creation time
631.txt
Same creation time
175.txt
Same creation time
798.txt
Same creation time
192.txt
Same creation time
961.txt
Same creation time
476.txt
Same creation time
566.txt
Same creation time
945.txt
Same creation time
681.txt
Same creation time
880.txt
Same creation time
162.txt
Same creation time
634.txt
Same creation time
746.txt
Same creation time
442.txt
Same creation time
35.txt
Same creation time
96.txt
Same creation time
771.txt
Same creation time
787.txt
Same creation time
972.txt
Same creation time
642.txt
Same creation time
495.txt
Same creation time
625.txt
Same creation time
666.txt
Same creation time
660.txt
Same creation time
6.txt
Same creation time
593.txt
Same creation time
549.txt
Same creation time
842.txt
Same creation time
314.txt
Same creation time
148.txt
**1000**
Si duermo desde hace algún tiempo (> 30 años) después de la eliminación de todos los archivos tendrán marcas de tiempo correctos.
¿Hay alguna forma de evitar esto? ¿Alguna llamada winapi que borra el archivo para siempre?
Esto se conoce como "tunelización". Consulte [este artículo de KB] (http://support.microsoft.com/?kbid=172190) para obtener más detalles. (El archivo se elimina para siempre. Es sólo el tiempo de creación y otros metadatos que se está realizando a través.) –
@RaymondChen, leyendo entre líneas deduzco que esto era para preservar el nombre de archivo largo para los programas que estaban trabajando con los nombres de archivo cortos? –
Eso fue parte de eso. Pero también para aplicaciones que usan el truco crear/cambiar nombre/eliminar para reemplazar un archivo. Esto propaga los metadatos del archivo anterior al nuevo archivo. –