Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2012, 20:32   #1
Сергей Горбач
 
Регистрация: 06.01.2012
Сообщений: 8
По умолчанию размер файла > 4Гб в Delphi7

Подскажите, может кто нибудь тоже сталкнулся с такой проблемой? Как работать с файлом в Delphi7 стандартными средствами, если его размер более 4Гб. Размер файла выдается неверно через FileSeek() и через FindNext() при поиске.
Пробовал корректировать процедуры системных модулей Delphi, но к положительному результату это так и не привело. У меня Windows XP SP3. Заранее благодарен
Сергей Горбач вне форума Ответить с цитированием
Старый 19.07.2012, 20:36   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Самое простое - WinAPI.

PS. Честно говоря, на Делфи не пишу, но сильно подозреваю, что в последних версиях эта проблема решена.
s-andriano вне форума Ответить с цитированием
Старый 19.07.2012, 20:45   #3
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

У TStream и Size, и Offset в Int64. Для работы с файлами TFileStream
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 19.07.2012, 20:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пример:
Код:
uses   windows,
  SysUtils;
var sr:TSearchRec; c:Cardinal;
begin
 FindFirst('i:\Операционки\Fin.vdi',faAnyFile,sr);
 c:=sr.FindData.nFileSizeHigh*MAXDWORD+sr.FindData.nFileSizeLow;
 writeln(c);
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Описание
Цитата:
nFileSizeHigh

Specifies the high-order DWORD value of the file size, in bytes. This value is zero unless the file size is greater than MAXDWORD. The size of the file is equal to (
nFileSizeHigh * MAXDWORD) + nFileSizeLow.


nFileSizeLow

Specifies the low-order DWORD value of the file size, in bytes.
для WIN32_FIND_DATA
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.07.2012, 22:20   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Давно имел такую проблему. Можно сразу FindFirstFile и ещё поправка
Цитата:
nFileSizeHigh

The high-order DWORD value of the file size, in bytes.

This value is zero unless the file size is greater than MAXDWORD.

The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow.
И тип явно указываем.
Код:
uses   windows,
  SysUtils;
var  c:int64;
sr: _WIN32_FIND_DATA;
begin
 FindFirstFile('e:\Virtual\WinXP.vdi',sr);
 c := int64(sr.nFileSizeLow) or (int64(sr.nFileSizeHigh) shl 32);
 writeln(c);
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
eoln вне форума Ответить с цитированием
Старый 13.08.2012, 22:56   #6
Сергей Горбач
 
Регистрация: 06.01.2012
Сообщений: 8
Вопрос

Цитата:
Сообщение от eoln Посмотреть сообщение
Давно имел такую проблему. Можно сразу FindFirstFile и ещё поправка
И тип явно указываем.
Код:
uses   windows,
  SysUtils;
var  c:int64;
sr: _WIN32_FIND_DATA;
begin
 FindFirstFile('e:\Virtual\WinXP.vdi',sr);
 c := int64(sr.nFileSizeLow) or (int64(sr.nFileSizeHigh) shl 32);
 writeln(c);
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Так все таки, можно ли каким либо способом прочитать и записать данные из/в файла за пределом 4Gb? За приведенный выше пример СПАСИБО, все работает.
Сергей Горбач вне форума Ответить с цитированием
Старый 13.08.2012, 23:21   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Так все таки, можно ли каким либо способом прочитать и записать данные из/в файла за пределом 4Gb?
Да. Выше же было сказано - используя TFileStream
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2012, 10:56   #8
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

WinRAR через делфи кажется написан и там нельзя создать архив больше 4гб
DelhiProgramer вне форума Ответить с цитированием
Старый 14.08.2012, 11:40   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от DelhiProgramer Посмотреть сообщение
WinRAR через делфи кажется написан и там нельзя создать архив больше 4гб
Вы, ИМХО, заблуждаетесь и других "заблудить" пытаетесь.

из офицальной документации на WinRAR (версия 3.93 от 2010)
Цитата:
Ограничения WinRAR


--------------------------------------------------------------------------------


Количество файлов, которое можно добавить в архив, зависит от объёма доступной памяти и длины имён файлов. Для добавления одного файла в архив RAR требуется ориентировочно 128 байт памяти. Например, для архивации одного миллиона файлов необходимо около 128 Мбайт оперативной памяти. WinRAR тестировался в работе с более чем миллионом файлов.

Максимальный размер архива RAR, равно как и любого файла в архиве RAR, практически не ограничен — он составляет 8 эксабайт (что равнозначно 8 589 934 592 Гбайт или 9 223 372 036 854 775 800 байт). Обратите внимание, что создавать архивы размером свыше 4 Гбайт можно только на дисках с файловой системой NTFS, поскольку более старые файловые системы не поддерживают таких объёмных файлов.

Размер архива ZIP, равно как и любого файла в архиве ZIP, не может превышать 2 Гбайт.

В целом архивный формат RAR значительно лучше оптимизирован для решения сложных задач с использованием большого количества файлов и гигабайтных дисковых пространств.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2012, 11:50   #10
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

Я имел ввиду самораспаковывающийся SFX-архив (или как он там называется)
DelhiProgramer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комп не видит 4гб памяти на жёстком диске :=) Операционные системы общие вопросы 6 04.07.2012 16:41
размер файла iliili Общие вопросы Delphi 4 22.06.2011 13:28
БИОС не видит 4ГБ аперативки Mr.Zip Компьютерное железо 1 06.02.2011 15:19
Размер файла Tesmont Помощь студентам 1 15.05.2009 17:31
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10