SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • Megan Parken

    Megan Parken

    19 Temmuz 2009
  • TouchePro

    TouchePro

    27 EYLÜL 2007