在写文件前,如何比较要写文件大小与硬盘剩余空间的大小

解决方案 »

  1.   

    //磁盘空间
    using System.Management;public ulong GetDiskSpace()
    {
        ManagementClass diskClass =new  ManagementClass("Win32_LogicalDisk");
        ManagementObjectCollection disks  = diskClass.GetInstances();
        ulong space=0;
        foreach(ManagementObject disk in disks)
        {
            if(disk["Name"].ToString() == "C:")
            {
                space = (ulong)disk["FreeSpace"];
            }
        }
        return space;
    }文件大小
    FileInfo f = new FileInfo(filename);
    f.Length
      

  2.   

    System.Managementusing System.Management;public ulong GetDiskSpace()
    {
        ManagementClass diskClass =new  ManagementClass("Win32_LogicalDisk");
        ManagementObjectCollection disks  = diskClass.GetInstances();
        ulong space=0;
        foreach(ManagementObject disk in disks)
        {
            if(disk["Name"].ToString() == "C:")
            {
                space = (ulong)disk["FreeSpace"];
            }
        }
        return space;

    或者
    用API
    private ulong freeBytesAvailable = 0;
    private ulong totalNumberOfBytes = 0;
    private ulong totalNumberOfFreeBytes = 0;[DllImport("kernel32.dll")] 
    private static extern bool GetDiskFreeSpaceEx(
    string lpDirectoryName,
    out UInt64 lpFreeBytesAvailable,
    out UInt64 lpTotalNumberOfBytes,
    out UInt64 lpTotalNumberOfFreeBytes); private void getDriveInfo(string driveName)
    {
        GetDiskFreeSpaceEx(driveName,out freeBytesAvailable,out totalNumberOfBytes,out totalNumberOfFreeBytes);
        //driveName是盘符
        //totalNumberOfBytes和totalNumberOfFreeBytes是结果
    }
    文件的大小就是length属性,比较就不说了
      

  3.   

    例如,建一个4K大小的"C:\tmp.dat"空文件:string file ="C:\\tmp.dat";
    if(File.Exists(file))return;
    FileStream fs = new FileStream("C:\\tmp.dat",FileMode.CreateNew);
    int length = 4096;
    byte[] buffer = new byte[length];
    fs.Write(buffer,0,length);
    fs.Close();