20 EYLÜL 2010, PAZARTESİ
Diskteki dosya boyutunu almak
var length = new System.IO.FileInfo(path).Length;
Bu dosya, diskteki boyutu değil mantıksal boyutunu verir.
C disk üzerinde bir dosya boyutu elde etmek istiyorum# (tercihen olmadanbirlikte çalışabilirlikWindows Explorer. tarafından bildirilen gibi )
Doğru boyut da dahil olmak üzere vermelidir:
- Sıkıştırılmış bir dosya
- Seyrek bir dosya
- Parçalanmış bir dosya
CEVAP
20 EYLÜL 2010, PAZARTESİ
Bu PaulStack olarak GetCompressedFileSize, ho1 önerdi, yanı sıra GetDiskFreeSpace kullanır, önerilen, ancak, P/Çağırmak yok. Sıkıştırılmış dosyalar için test ettik, ve parçalanmış dosyalar için çalışmıyor sanırım.
public static long GetFileSizeOnDisk(string file)
{
FileInfo info = new FileInfo(file);
uint dummy, sectorsPerCluster, bytesPerSector;
int result = GetDiskFreeSpaceW(info.Directory.Root.FullName, out sectorsPerCluster, out bytesPerSector, out dummy, out dummy);
if (result == 0) throw new Win32Exception();
uint clusterSize = sectorsPerCluster * bytesPerSector;
uint hosize;
uint losize = GetCompressedFileSizeW(file, out hosize);
long size;
size = (long)hosize << 32 | losize;
return ((size clusterSize - 1) / clusterSize) * clusterSize;
}
[DllImport("kernel32.dll")]
static extern uint GetCompressedFileSizeW([In, MarshalAs(UnmanagedType.LPWStr)] string lpFileName,
[Out, MarshalAs(UnmanagedType.U4)] out uint lpFileSizeHigh);
[DllImport("kernel32.dll", SetLastError = true, PreserveSig = true)]
static extern int GetDiskFreeSpaceW([In, MarshalAs(UnmanagedType.LPWStr)] string lpRootPathName,
out uint lpSectorsPerCluster, out uint lpBytesPerSector, out uint lpNumberOfFreeClusters,
out uint lpTotalNumberOfClusters);
Bunu Paylaş:
java verimli bir şekilde dosya boyutun...
Klasör ya da dosya boyutunu almak...
Nasıl bir liste boyutunu almak için...
Nasıl Gıt hazırlama alanından tek bir ...
Nasıl Gıt belirli revizyon tek bir dos...