Delphi 中网络驱动器上的可用磁盘空间

发布于 2024-12-21 19:38:00 字数 358 浏览 2 评论 0原文

我正在为 A2 计算编写一个程序,它会导出大量数据。我在本地网络上的 HDD 分配约为 50 MB,因此非常适合测试“无磁盘空间”错误。

目前,当程序空间不足时,它会在导出过程中崩溃,并出现 I/O 错误 112。如果文件可能超出可用空间,我想提前发出警告。我知道文件有多大(平均每条记录 24.8 字节),所以我需要做的就是找出有多少可用空间。

当我使用像 \\qmcsan1\Cxxxxx$\filename.csv 这样的文件路径的网络驱动器时,如何使用 DiskFree 这样的函数来计算可用空间?任何此类函数还需要处理本地驱动器,例如 C:/

任何想法都非常感激。

I am making a program for A2 Computing which exports a lot of data. My HDD allocation on the local network is about 50 MB, so it's a good candidate to test the "no disk space" error.

Currently when the program runs out of space it crashes mid-export with I/O Error 112. I would like to warn ahead of time if the file might exceed available space. I know how big the file will be (24.8 bytes per record, on average), so all I need to do is find out how much space is free.

As I am working on a network drive, with a file path like \\qmcsan1\Cxxxxx$\filename.csv, how do I use functions like DiskFree to calculate available space? Any such function also needs to handle local drives like C:/.

Any ideas much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拥抱我好吗 2024-12-28 19:38:00

一种简单的方法是调用 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.

One easy approach is to call the GetDiskFreeSpaceEx API function.

Unfortunately this function is mis-declared in the Delphi Windows unit, at least it is in XE2. But there is a version declared in SysUtils which is correct. Make sure you use that version!

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.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文