__int64 val;
LARGE_INTEGER fsize;
GetFileSizeEx(hFile,&fsize);
val=fsize.QuadPart;
Как загнать в __int64 размер файла посредством GetFileSizeEx?
файла в переменную типа __int64?
Цитата:
Originally posted by DENIS451
Как в C++ Builder, 6 используя функцию GetFileSizeEx, загнать размер
файла в переменную типа __int64?
Как в C++ Builder, 6 используя функцию GetFileSizeEx, загнать размер
файла в переменную типа __int64?
Например так:
Код:
Цитата:
Originally posted by ddnh_bc
Например так:
Например так:
Код:
__int64 val;
LARGE_INTEGER fsize;
GetFileSizeEx(hFile,&fsize);
val=fsize.QuadPart;
LARGE_INTEGER fsize;
GetFileSizeEx(hFile,&fsize);
val=fsize.QuadPart;
Что я не так делаю?
Код:
char vr_buff[100];
__int64 fff = 0;
FILE* hFile;
LARGE_INTEGER fsize;
int bute_1=0;
int bute_2=0;
hFile = fopen("H:\\2.rar","rb");
GetFileSizeEx(hFile,&fsize);
fff=fsize.QuadPart;
bute_1 = fff / 1000000000;
bute_2 = fff - 1000000000*bute_1;
sprintf(vr_buff,"%d%d",bute_1,bute_2);
Memo1->Lines->Add(vr_buff);
__int64 fff = 0;
FILE* hFile;
LARGE_INTEGER fsize;
int bute_1=0;
int bute_2=0;
hFile = fopen("H:\\2.rar","rb");
GetFileSizeEx(hFile,&fsize);
fff=fsize.QuadPart;
bute_1 = fff / 1000000000;
bute_2 = fff - 1000000000*bute_1;
sprintf(vr_buff,"%d%d",bute_1,bute_2);
Memo1->Lines->Add(vr_buff);
получается всегда 12886081551 на любом файле.
Код:
#include <fcntl.h>
#include <sys\stat.h>
int open(const char *path, int access [ , unsigned mode ] );
#include <sys\stat.h>
int open(const char *path, int access [ , unsigned mode ] );
получается!
Я жду пока ddnh_bc ответит он должен знать,
т.к. назвался профессионалом.
Цитата:
Originally posted by DENIS451
Я так и сделал, но ведь размер не правильно
получается!
Я жду пока ddnh_bc ответит он должен знать,
т.к. назвался профессионалом.
Я так и сделал, но ведь размер не правильно
получается!
Я жду пока ddnh_bc ответит он должен знать,
т.к. назвался профессионалом.
А я флудер.=)
Код:
HANDLE file=CreateFile("G:\\Films\\Ali G Indahouse\\Ali G Indahouse.avi",
GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
__int64 fls;
DWORD hgs,lws;
lws=GetFileSize(file,&hgs);
CloseHandle(file);
fls=hgs;
fls<<=32;
fls+=lws;
Memo1->Lines->Add(IntToStr(fls));
GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
__int64 fls;
DWORD hgs,lws;
lws=GetFileSize(file,&hgs);
CloseHandle(file);
fls=hgs;
fls<<=32;
fls+=lws;
Memo1->Lines->Add(IntToStr(fls));
В данный момент я создаю файл 5 гигов весом, чтобы проверить работу этого кода. (так как DWORD 32 бита - может хранить размер до 4 гигабайт)
Все работает. Чудесно, да? Мне теперь 5 гиговый TXT'шник не нужен. Тебе не скинуть на мыло?=)
обрабатывать больше чем 4 Гб.
и ddnh_bc-у.
Теперь у меня появились новые вопросы.
Разве GetFileSizeEx это всё не просще сделать?
Функция CreateFile с такими парамертрами:
HANDLE file=CreateFile("G:\\Films\\AliIndahouse\\Ali G Indahouse.avi",
GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NO
RMAL,0);
не будет мешать ISA серверу дописывать строки в
лог файл который я читаю?
Есщё я не могу с ReadFile разобраться, тока для
ReadFile я отдельную тему создам.
Код:
byte buf[256];
TFileStream *stream = new TFileStream("c:\\file.cpp",fmOpenRead | fmShareDenyNone);
stream->Size; // Размер файла.
stream->Read(buf,256);
/*...*/
delete stream;
TFileStream *stream = new TFileStream("c:\\file.cpp",fmOpenRead | fmShareDenyNone);
stream->Size; // Размер файла.
stream->Read(buf,256);
/*...*/
delete stream;
Так другие программы тоже смогут работать с файлом даже тогда, когда ты его читаешь.
а не тока сначала. Лучше обьясни как работать
с ReadFile.
Цитата:
Originally posted by DENIS451
Мне надо читать файл с произвольного места
а не тока сначала. Лучше обьясни как работать
с ReadFile.
Мне надо читать файл с произвольного места
а не тока сначала. Лучше обьясни как работать
с ReadFile.
Неугомонный.=)
Код:
stream->Position;
Вот тебе и смена позиции. А чем тебе ReadFile приглянулся?
из файла, но работала очень медленно. Потом я
стал читать сразу по мегабайту в память
fread(kusok,dlinna_kuska,1,log);
и скорость обработки файла вырасла в 40 раз,
хотя прога значительно усложнилась.
Вот я опасаюсь а не станет ли
stream->Read(buf,1000000);
работать медленние fread?
Цитата:
Originally posted by DENIS451
Моя прога первой версии брала по одному байту
из файла, но работала очень медленно. Потом я
стал читать сразу по мегабайту в память
fread(kusok,dlinna_kuska,1,log);
и скорость обработки файла вырасла в 40 раз,
хотя прога значительно усложнилась.
Вот я опасаюсь а не станет ли
stream->Read(buf,1000000);
работать медленние fread?
Моя прога первой версии брала по одному байту
из файла, но работала очень медленно. Потом я
стал читать сразу по мегабайту в память
fread(kusok,dlinna_kuska,1,log);
и скорость обработки файла вырасла в 40 раз,
хотя прога значительно усложнилась.
Вот я опасаюсь а не станет ли
stream->Read(buf,1000000);
работать медленние fread?
1000000 - не 1 мегабайт (1 Мб - 2^20 = 1048576.Но это ты и без меня знаешь.=) )
А ты проверь. Пусть в цикле сначала fread прочитает много-много раз, а потом stream->Read столько же. А ты сравнишь время. И решишь, что лучше. Вот. А файл для чтения в аттаче. При распаковке он займет ровно 2 гигабайта. Я не шучу.
фильмов в рар архив без сжатия засунуть.
Я ща в исходниках меняю код на тот что с
потоком. Потом напишу что выйдет.
Цитата:
Originally posted by DENIS451
Спасибо, но я и так файл большой могу сделать-
фильмов в рар архив без сжатия засунуть.
Я ща в исходниках меняю код на тот что с
потоком. Потом напишу что выйдет.
Спасибо, но я и так файл большой могу сделать-
фильмов в рар архив без сжатия засунуть.
Я ща в исходниках меняю код на тот что с
потоком. Потом напишу что выйдет.
Ну что ж, рад. Успехов!
(Да простят мне флуд.)