我正在为A2 Computing制作一个导出大量数据的程序。我在本地网络上的硬盘分配大约为50 MB,因此它是测试“无磁盘空间”错误的理想选择。
目前当程序空间不足时,它会在I / O错误112的情况下崩溃。如果文件可能超出可用空间,我想提前警告。我知道文件有多大(平均每条记录24.8字节),所以我需要做的就是找出空闲的空间。
当我正在使用像\\qmcsan1\Cxxxxx$\filename.csv
这样的文件路径处理网络驱动器时,如何使用DiskFree
之类的函数来计算可用空间?任何此类功能也需要处理C:/
等本地驱动器。
任何想法都非常感激。
答案 0 :(得分:10)
一种简单的方法是调用GetDiskFreeSpaceEx
API函数。
不幸的是,这个函数在Delphi Windows单元中被错误声明,至少它在XE2中。但是在SysUtils中声明的版本是正确的。确保使用该版本!
program FreeDiskSpace;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Folder = 'C:\';
var
FreeAvailable, TotalSpace: Int64;
begin
if SysUtils.GetDiskFreeSpaceEx(PChar(Folder), FreeAvailable, TotalSpace, nil) then begin
Writeln(TotalSpace div (1024*1024*1024), 'GB total');
Writeln(FreeAvailable div (1024*1024*1024), 'GB free');
end;
end.