Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330

Получение размера файла

28.11.2013, 04:00. Показов 1484. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нижепредставленные два варианта функций действительно справляются с задачей получения размерности файла по заданному пути. Но вот, если файл занят, например, сейчас его раздает торрент-клиент, то вся программа вылетает в критическую ошибку и работа стопорится. Что посоветуете?


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
//Вариант №1
function GetFileSize(FileName: String): Integer;
var
  FS: TFileStream;
begin
  try
    FS := TFileStream.Create(Filename, fmOpenRead);
  except
    Result := -1;
  end;
  if Result <> -1 then Result := FS.Size;
  FS.Free;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Вариант №2
function GetFileSize2(FileName: string): Int64;
var F: TMemoryStream;
begin
  try
    F:=TMemoryStream.Create;
    F.LoadFromFile(FileName);
    Result:=F.Size;
 
 
  finally
    F.Free;
  end;
end;
Добавлено через 7 минут
Соственно ошибка вылазает даже если я обрабатываю свой код try except, посмотрите может, я где что напутал или все-таки функции как-то выпрямить можно?

Delphi
1
2
3
4
5
6
7
         for i:=form1.memo1.Lines.Count-1 downto 0 do begin
                                                      try
          if GetFileSize(form1.memo1.Lines[i])>3114000 then form1.Memo1.Lines.Delete(i); //!!
                                                      except
                                                    form1.Memo1.Lines.Delete(i);
                                                    end;
                                                      end;
Добавлено через 38 минут
Я обратил внимание на то, что ошибка выпадает тогда, когда в memo присутствует путь к файлу, которого не существует.
попытка сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function GetFileSize2(FileName: string): Int64;
var F: TMemoryStream;
begin
  try
   if FileExists(FileName)=False then begin Result:=99999999; exit; end;
    F:=TMemoryStream.Create;
    F.LoadFromFile(FileName);
    Result:=F.Size;
 
 
  finally
    F.Free;
  end;
end;
не увенчалась успехом, интересно почему. Проблему-то я решил таким образом
Delphi
1
 for i:=form1.memo1.Lines.Count-1 downto 0 do if FileExists(form1.memo1.Lines[i])=False then form1.Memo1.Lines.Delete(i);
Но понять почему не получилось организовать результат функции 99999999 при отсутствующем файле не понял.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2013, 04:00
Ответы с готовыми решениями:

Получение фактического размера и размера файла в байтах
Здравствуйте, уважаемые форумчане! Мне необходимо получить фактический размер, занимаемый файлом на диске, и размер файла в байтах...

Получение размера файла FTP
Взял код из FAQ по получению размера файла на FTP - сервере: Dim Request As Net.FtpWebRequest =...

Получение размера файла с кирилическими символами
Есть код: std::fstream fp2(Memo9-&gt;Lines-&gt;Strings.w_str() , std::fstream::in); fp2.seekp(0, std::ios::end); int size2 =...

2
 Аватар для teleprog
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
28.11.2013, 04:04
А если так попробовать?
Delphi
1
2
3
4
5
6
7
8
var
  FileSize:DWORD;
  f:THandle;
begin
 ...
  FileSize:=GetFileSize(f,nil);
  ...
end
2
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
29.11.2013, 00:37  [ТС]
Спасибо, при первом удобном случае попробую, я проект не бекапил и обошелся вышеописанным решением, кстати говоря, кажется, что вполне достойно получилось - главное результат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2013, 00:37
Помогаю со студенческими работами здесь

Получение размера файла больше 4гб
Привет всем, есть у меня образ 7 винды, хочу через винапи функции получить ее размер. HANDLE hFile; if (hFile =...

Получение размера файла с помощью fstream. ОТВЕТ.
Для того, кто не знает как получить размер файла, и того, кто не хочет пользоваться API или не умеет: ВОТ ПОЛУЧЕНИЕ РАЗМЕРА: fstream...

Ошибка при получение размера файла с сайта
QNetworkRequest request;; request.setUrl(QUrl(&quot;http://finder-rp.ru/custom.zip&quot;)); QNetworkAccessManager* pManager= new...

Настройка Dev-C++ на получение исполняемого файла минимального размера
Доброго времени суток! Подскажите настройки компилятора IDE Dev-C++ (v 4.9.9.2). Элементарно, Hello world! у меня больше 450 кб...

Отображение размера файла в kB, MB или GB в зависимости от величины его размера в байтах
добрый вечер! У меня есть значение размера файлов в байтах. Подскажите, как отобразить размера файлов в KB MB GB? Интересует два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru