获取磁盘剩余空间 C++ &Qt &C# 各种坑类型转换

1 篇文章 0 订阅

直接干!!

一、QT & 纯C++

#include <string>

//函数声明
double getDiskFreeSpace(LPCWSTR lpcwstrDriver);

int main(int argc, char *argv[])
{
    
    //C++: string转LPCWSTR
    //具体driver路径可以根据文件目录自己裁切,不能是具体文件
    /*
    std::string filePath = "E:/a/b/c/d.exe";
    std::string diskCharacter = filePath.substr(0, filePath.find(":") + 1);
    */
    std::string diskCharacter = "E:";
    size_t size = diskCharacter.length();
    wchar_t *buffer = new wchar_t[size + 1];
    MultiByteToWideChar(CP_ACP, 0, diskCharacter.c_str(), size, buffer, size * sizeof(wchar_t));
    buffer[size] = 0;  //确保以 '\0' 结尾 
    LPCWSTR lpcwstrDriver = buffer;
    //Qt: QString转LPCWSTR
    /*
    QString filePath = "E:/a/b/c/d.exe";
    QString diskCharacter = filePath.split(':')[0] + ":";
    */
    //QString diskCharacter = "E:/";
    //LPCWSTR lpcwstrDriver = (LPCWSTR)driver.utf16(); 
    
    double diskFreeSpace = getDiskFreeSpace(lpcwstrDriver);

    delete buffer;
    buffer = NULL;
}


/// <summary>
/// 获取磁盘剩余空间 GB
/// 想要什么结果自己换算
/// </summary>
/// <param name="lpcwstrDriver"></param>
/// <returns>double</returns>
double getDiskFreeSpace(LPCWSTR lpcwstrDriver)
{
    double freeSpace = 0;
    ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;
    if (!GetDiskFreeSpaceEx(lpcwstrDriver, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes))
    {
        //"ERROR: Call to GetDiskFreeSpaceEx() failed.";
        freeSpace = 0;
    }
    freeSpace = liTotalFreeBytes.QuadPart / 1024.0 / 1024.0 / 1024.0;
    return freeSpace;
}

 

二、C#

[STAThread]
        static void Main()
        {
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            string AppPath = Application.StartupPath.ToString();
            string volume = AppPath.Substring(0, AppPath.IndexOf(':'));
            long freespace = GetHardDiskFreeSpace(volume);
        }

        /// <summary>
        /// 获取硬盘剩余空间 单位MB
        /// </summary>
        /// <param name="str_HardDiskName"></param>
        /// <returns></returns>
        public static long GetHardDiskFreeSpace(string str_HardDiskName)
        {
            long totalSize = 0;
            str_HardDiskName = str_HardDiskName + ":\\";
            System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
            foreach (System.IO.DriveInfo drive in drives)
            {
                if (drive.Name == str_HardDiskName)
                {
                    totalSize = drive.TotalFreeSpace / (1024 * 1024);
                }
            }
            return totalSize;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值