Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с нетипизированными файлами более 2 гигабайт


Страницы:   1 2

rioko ©   (2012-06-04 13:47:00) 

Проблема в следующем, как перейти в конец файла посредством seek(),  для записи \ чтения, если размер файла более 2.5 гигабайт, и функция

function GetFileSize(FIleName: string): integer;
var
 f: file of Byte;
begin
 try
   AssignFile(f, FileName);
   Reset(f);
   result := filesize(F);
   CloseFile(f);
 except
   result := 0;
 end;
end;


.. возвращает ошибку


seek(f, getfilesize(f2))

... I\O error ...


han_malign   (2012-06-04 18:05:00) [21]


> seek(f, getfilesize(f2))

hFile:= CreateFile(...);
if(hFile <> INVALID_HANDLE_VALUE )then begin
   dwHigh:= 0;
   dwLow:= SetFilePointer(hFile, 0, @dwHigh, FILE_END);
   if( (dwLow <> $FFFFFFFF) or (GetLastError = ERROR_SUCCESS) )then
      fileSize:= int64(dwHigh) shl 32 or dwLow;
   ...
   CloseHandle(hFile);
end;


MBo   (2012-06-04 14:52:00) [22]

seek в BDS 2006 принимает 32-разрядный параметр

Если нужно работать с большими файлами, то технологию, вероятно, стоит сменить, наример,  на Stream-ы, если в нужной версии они 64-битный размер поддерживают - в 2006 это так.)


DVM   (2012-06-04 14:49:00) [23]


> rioko

Имхо, взять TFileStream и не мучаться


Palladin   (2012-06-04 14:43:00) [24]

function secretFuntionName(FileName: String): Int64;
var
 FindData: TWin32FindData;
 hFind: THandle;
begin
 Result := -1;
 hFind := FindFirstFile(PChar(FileName), FindData);
 if hFind <> INVALID_HANDLE_VALUE then
 begin
   Windows.FindClose(hFind);
   if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
   begin
     Int64Rec(Result).Lo := FindData.nFileSizeLow;
     Int64Rec(Result).Hi := FindData.nFileSizeHigh;
   end;
 end;
end;


Ega23   (2012-06-04 13:52:00) [25]

Через TSearchRec?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо