Я столкнулся с проблемой, которая связана с хранилищем файлов, которое использует Azure File Syn c для отправки старых файлов на Azure. В обычном сценарии windows вы все равно увидите файлы, которые хранятся в основной таблице файлов. Тем не менее, физический размер на диске будет 0 байтов.
Я использую следующее для обнаружения 0-байтового файла:
public static bool IsZeroByteFile(string filePath)
{
uint hosize;
uint losize = GetCompressedFileSizeW(filePath, out hosize);
return losize == 0;
}
[DllImport("kernel32.dll")]
static extern uint GetCompressedFileSizeW([In, MarshalAs(UnmanagedType.LPWStr)] string lpFileName,
[Out, MarshalAs(UnmanagedType.U4)] out uint lpFileSizeHigh);
Я пробовал следующее, чтобы вызвать файл syn c:
1) File.ReadAllBytes
который содержит все байты, но не заставляет файл хранить физические байты.
2) File.SetLastWriteTimeUtc(filePath, DateTime.UtcNow)
, который устанавливает дату изменения, но не вызывает Azure Syn c
Я мог бы использовать считанные байты, чтобы перезаписать один и тот же файл, но хотел бы избежать необходимости читать все байты в первую очередь из-за больших файлов, а также избежать изменения даты изменения.