Свободное дисковое пространство на сетевом диске в Delphi - PullRequest
8 голосов
/ 15 декабря 2011

Я делаю программу для A2 Computing, которая экспортирует много данных.Мое выделение жесткого диска в локальной сети составляет около 50 МБ, так что это хороший кандидат для проверки ошибки «нет места на диске».

В настоящее время, когда программе не хватает места, происходит сбой в середине экспорта с вводом / выводомОшибка 112. Я хотел бы предупредить заранее, если файл может превышать доступное пространство.Я знаю, насколько большим будет файл (в среднем 24,8 байта на запись), поэтому все, что мне нужно сделать, это выяснить, сколько свободного места.

Поскольку я работаю на сетевом диске спуть к файлу, например \\qmcsan1\Cxxxxx$\filename.csv, как использовать функции, например DiskFree, для вычисления доступного пространства?Любая такая функция также должна обрабатывать локальные диски, такие как C:/.

Любые идеи высоко ценятся.

1 Ответ

10 голосов
/ 15 декабря 2011

Одним из простых способов является вызов API-функции GetDiskFreeSpaceEx* 1003. *

К сожалению, эта функция неправильно объявлена ​​в модуле 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.
...