C#中利用API获取磁盘可用空间的问题

问题描述

usingSystem;usingSystem.Runtime.InteropServices;classMainClass{[DllImport("User32.dll")]publicstaticexternintMessageBox(inth,stringm,stringc,inttype);[DllImport("Kernel32.dll")]publicstaticexternSystem.Int32GetDiskFreeSpace(refstringpathname,System.Int32n1,System.Int32n2,System.Int32n3,System.Int32n4);staticintMain(){stringpath="C:\";System.Int32i=0,j=0,k=0,l=0;longn=GetDiskFreeSpace(refpath,i,j,k,l);stringmyString="磁盘可用空间为:"+GetDiskFreeSpace(refpath,i,j,k,l);returnMessageBox(0,myString,"MyMessageBox",0);}}为什么GetDiskFreeSpace返回值为0即调用失败?

解决方案

解决方案二:
[DllImport("kernel32.dll",EntryPoint="GetDiskFreeSpaceExA")]publicstaticexternintGetDiskFreeSpaceEx(stringlpRootPathName,outlonglpFreeBytesAvailable,outlonglpTotalNumberOfBytes,outlonglpTotalNumberOfFreeBytes);Usage:longa,b,c;GetDiskFreeSpaceEx(@"D:",outa,outb,outc);
解决方案三:
可以不用API,而用WMI来获得磁盘空间信息。MessageBox()API可以用System.Windows.Form.MessageBox.Show()来完成。usingSystem;usingSystem.Windows.Form;//要添加System.Windows.Form引用usingSystem.Management;//要添加System.Management引用//...publicvoidTest(){ManagementObjectdisk=newManagementObject("win32_logicaldisk.deviceid="c:"");disk.Get();Console.WriteLine("LogicalDiskSize="+disk["Size"]+"bytes");Console.WriteLine("LogicalDiskFreeSpace="+disk["FreeSpace"]+"bytes");System.Windows.Form.MessageBox.Show("hello");}

至于GetDiskFreeSpace()API,第一个参数有错误,用string就可以了,而不要用refstring。
解决方案四:
stringmyString="磁盘可用空间为:"+GetDiskFreeSpace(path,i,j,k,l);
解决方案五:
没有用过外部函数,先顶一下
解决方案六:
2楼说的对

时间: 2024-09-17 04:23:26

C#中利用API获取磁盘可用空间的问题的相关文章

asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)_实用技巧

复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; usi

DELPHI中利用API函数实现多态FORM

实现异型FORM并不是一件难事,本文将向您介绍如何利用API函数实现圆角矩 形和椭圆形FORM,并在此基础之上探讨实现TWINcontrol类的后裔的异型的实现 . 欲改变FORM的形状,也就是实现对区域(region)的控制.在Win32 API程序 参考手册有关区域(region)的定义是这样描述的:它可以是一个矩形,多边形 ,椭圆形(或者是两者的复合,或者是更多的形状),这些都可以被填充,画图 ,翻转,结构化并可以得到焦点执行. 由定义得出结论:区域(region)是可以被改变和操纵的,依

在C#中调用API获取网络信息和流量

流量|网络 最近一项目中要求显示网络流量,而且必须使用C#. 事实上,调用 IpHlpApi.dll 的 GetIfTable API 可以轻易获得网络信息和网络流量.只是要在C#中实现还是比较复杂. 先看看怎么定义该 API [DllImport("IpHlpApi.dll")]        extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder);本来想把 pIfTab

pb中利用API实现动画特效

一.问题的提出 Powerbuilder是一个面向对象的开发大型数据库的图形化的前端开发工具,其优异的性能越来越受到广大开发人员的欢迎.然而,在绘图方面却显不足.其图片的显示是主要靠picture控件来完成的,由于不象c++builder等工具那样具有画布功能,要实现动画特效,单靠Picture 控件本身的属性与方法来实现,只能完成基本的.简单的动画,且效果不理想,容易产生闪烁现象.我们在开发中为了较好的实现动画特效,调用了Windows API函数,结果不仅克服了闪烁现象,而且还能实现较复杂的

Linux/Unix shell 脚本监控磁盘可用空间

    Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少.下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考.   1.监控磁盘的空闲空间shell脚本 robin@SZDB:~/dba_scripts/custom/bin> more ck_fs_space.sh #!/bin/bash # -----------------------------------------------------------------------------

asp.net中利用ajax获取动态创建表中文本框的值_实用技巧

假设现在主表为公司表(公司ID,公司名称,公司类型,公司规模),从表为部门表(部门ID,公司ID,经理,联系电话),现在一个公司有四个部门,要在同一个页面上录入公司信息以及四个部门的信息,如何动态创建部门信息录入口,以及如何获取数据存储到数据库中,请看下面的代码. 页面HTML代码及js脚本 代码 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" Codebehind="Default.

在vs2013中利用C#获取sql2008数据库脚本

问题描述 如题所述,我需要在vs里面,点击某个按钮,即可获取某个数据库(数据库名已知)的脚本文件..还请各位大神帮忙了 解决方案 解决方案二:坐等大神们的到来解决方案三:自己先顶着解决方案四:大神们快快来围观啊....难道都放假嗨皮去了啊...解决方案五:什么叫做数据库的脚本?没有捷径,你自己先整理出来你要什么脚本,然后一项一项的写代码,解决方案六:引用4楼rrxxjj1234的回复: 什么叫做数据库的脚本?没有捷径,你自己先整理出来你要什么脚本,然后一项一项的写代码, 数据库脚本就是在数据库里

linux中利用sshpass获取多台主机的信息

最早做运维的时候,自动化工具还不是很火热,而需要批量执行的时候一般会借助pssh.sshpass+脚本 这类方式完成批量执行的需求.2012年的时候当时还对ssh工具做过一篇记录---sshpass:ssh非交互式支持password参数 .近期公司购买了阿里云的平台,会在某机房上阿里云项目.所以当前的很多主机会迁移动阿里平台上去,目前很多业务模块都在做资源使用情况的调研,做为ITO部门,需要配合业务部分获取资源使用情况.而之前装过ansible的主机被人重装了,商业化的BMC在获取数据上感觉又

两种方法,获取磁盘剩余空间--PYTHON

import ctypes import os import platform import sys def get_free_space_mb(folder): """ Return folder/drive free space (in bytes) """ if platform.system() == 'Windows': free_bytes = ctypes.c_ulonglong(0) ctypes.windll.kernel32.