Надо определить размер файла в Delphi при условии, что его размер в ьайтах больше возможного для Integer размера.
Например, образ DVD (5 Гб)
У меня - 14 Гб файл.
Например, образ DVD (5 Гб)
У меня - 14 Гб файл.
иначе поработай со строковым типом. тогда уже точно любая цифра поместится
DWORD GetFileSize(.....
Кстати я вообще не видел файлов больше 2 Ггб
DWORD не больше Integer'а.
DWORD = LongWord;
Integer –2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit
Я читаю и пишу файл коммандами BlockRead и BlockWrite соответственно.
The ReadFile function reads data from a file, starting at the position indicated by the file pointer. After the read operation has been completed, the file pointer is adjusted by the number of bytes actually read, unless the file handle is created with the overlapped attribute. If the file handle is created for overlapped input and output (I/O), the application must adjust the position of the file pointer after the read operation.
BOOL ReadFile(
HANDLE hFile, // handle of file to read
LPVOID lpBuffer, // address of buffer that receives data
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // address of number of bytes read
LPOVERLAPPED lpOverlapped // address of structure for data
);
Просто если функция возвращает что то - как то, то пофиг куда это записывать, нужно юзать native type возвращаемого значения.
Я читаю и пишу файл коммандами BlockRead и BlockWrite соответственно. Они намного быстрее обычного Read и Write. Но не нашел аналогов в API. После открытия таким способом можно стандартные функции Delphi использовать?
DWORD'а все равно не хватит на 5 Ггб.
Че делать то?
DWORD'а все равно не хватит на 5 Ггб.
Че делать то?
GetFileSizeEx
The GetFileSizeEx function retrieves the size of a specified file.
BOOL GetFileSizeEx(
HANDLE hFile, // handle to file
PLARGE_INTEGER lpFileSize // file size
);
Parameters
hFile
[in] Handle to the file whose size is to be returned. The handle must have been created with either GENERIC_READ or GENERIC_WRITE access to the file.
lpFileSize
[out] Pointer to a LARGE_INTEGER structure that receives the file size.
The LARGE_INTEGER structure is used to represent a 64-bit signed integer value.
typedef union _LARGE_INTEGER {
struct {
DWORD LowPart;
LONG HighPart;
};
LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
Function FileSize64(FileName:string):int64;
var ts:TSearchRec;
begin
if FindFirst(FileName, faAnyFile, ts)=0 then
begin
Result:=ts.FindData.nFileSizeHigh*4294967296+ts.FindData.nFileSizeLow;
Findclose(ts);
end
end;
Страницы: 1
Предыдущая тема: Shareware protection