WriteFile() и большие файлы (>4.2Гб) в Win98
От: and_tjurin Удмуртия  
Дата: 29.10.02 05:03
Оценка:
Здравствуйте.
Для дозаписи файлов использую такой код:



HANDLE hFile;
DWORD  dwLow,PtrLow,dwError;
LONG   dwHei,PtrHei;

 hFile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
 if(hFile == INVALID_HANDLE_VALUE) return(-1);

 dwHei=0; dwLow=SetFilePointer(hFile,0,&dwHei,FILE_END);
 if(dwLow == 0xFFFFFFFF && (dwError = GetLastError()) != NO_ERROR)
  { 
    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwError,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),buf,250,NULL);
    return(-2);
   } 
  PtrHei=dwHei; PtrLow=dwLow;



 WriteFile(hFile,SomeData,SizeData,&dwError,NULL);

 CloseHandle(hFile); 
 if(dwError == 0)  return(-3);


Файлы больше 4.2 Гб нормально записываются в Win95 и Win2000, но в Win98 возвращается ошибка (-3).
Это особенность Win98 или ошибка в программе?
На Win98 стоит FAT32.

С уважением
Андрей Тюрин
Re: WriteFile() и большие файлы (>4.2Гб) в Win98
От: SVV Беларусь  
Дата: 29.10.02 08:59
Оценка:
Здравствуйте and_tjurin, Вы писали:

AT>Здравствуйте.

AT>Для дозаписи файлов использую такой код:

AT>


AT>
AT>HANDLE hFile;
AT>DWORD  dwLow,PtrLow,dwError;
AT>LONG   dwHei,PtrHei;

AT> hFile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
AT> if(hFile == INVALID_HANDLE_VALUE) return(-1);

AT> dwHei=0; dwLow=SetFilePointer(hFile,0,&dwHei,FILE_END);
AT> if(dwLow == 0xFFFFFFFF && (dwError = GetLastError()) != NO_ERROR)
AT>  { 
AT>    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwError,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),buf,250,NULL);
AT>    return(-2);
AT>   } 
AT>  PtrHei=dwHei; PtrLow=dwLow;
В этом примере ты не используешь PtrHei (почему не PtrHi?), PtrLow. Зачем засорять пример?

AT>

AT> WriteFile(hFile,SomeData,SizeData,&dwError,NULL);
Если уж приводишь подробный код, то почему не пишешь что такое SizeData?

AT> CloseHandle(hFile); 
AT> if(dwError == 0)  return(-3); 
AT>


AT>Файлы больше 4.2 Гб нормально записываются в Win95 и Win2000, но в Win98 возвращается ошибка (-3).

Если бы проблема была с 95-й, я бы не удивился. А вообще советую проверить условия в которых существуют Win9x.
AT>Это особенность Win98 или ошибка в программе?
AT>На Win98 стоит FAT32.

В общем, если с 95-й проблем нет, ищи отличия в условиях работы 98-й и 95-й.

AT>С уважением

AT>Андрей Тюрин

AT>
Re: WriteFile() и большие файлы (>4.2Гб) в Win98
От: Hacker_Delphi Россия  
Дата: 29.10.02 10:48
Оценка:
Здравствуйте and_tjurin, Вы писали:

AT>Файлы больше 4.2 Гб нормально записываются в Win95 и Win2000, но в Win98 возвращается ошибка (-3).

С 95ми аккуратнее — у моего знакомого файл как-то раз закольцевался через конец диска на мастер бут
естессно весь винт к чертям полетел.
... << RSDN@Home 1.0 alpha 12 РУЛИТ!!! >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: WriteFile() и большие файлы (>4.2Гб) в Win98
От: Reinhard  
Дата: 29.10.02 19:07
Оценка:
Здравствуйте and_tjurin, Вы писали:

AT> WriteFile(hFile,SomeData,SizeData,&dwError,NULL);

AT> CloseHandle(hFile);
AT> if(dwError == 0) return(-3);

А что же GetLastError возращает?
Посмотри и заодно посмотри расшифровку кода ошибки.

Должно прояснить ситуацию.
Re: WriteFile() и большие файлы (>4.2Гб) в Win98
От: promko Украина  
Дата: 29.10.02 19:09
Оценка: 4 (2)
Здравствуйте and_tjurin, Вы писали:

AT>Файлы больше 4.2 Гб нормально записываются в Win95 и Win2000, но в Win98 возвращается ошибка (-3).

AT>Это особенность Win98 или ошибка в программе?
AT>На Win98 стоит FAT32.

посмотри в МСДН — Q250301
там пишут что
Win95, Win98 не поддерживают функции
LockFile, ReadFile, ReadFileEx, SetFilePointer, UnLockFile, WriteFile, WriteFileEx
для работы с файлами размеры которых — 4,294,967,295 bytes or larger
Re[2]: WriteFile() и большие файлы (>4.2Гб) в Win98
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.10.02 08:00
Оценка:
Здравствуйте Hacker_Delphi, Вы писали:

AT>>Файлы больше 4.2 Гб нормально записываются в Win95 и Win2000, но в Win98 возвращается ошибка (-3).

HD>С 95ми аккуратнее — у моего знакомого файл как-то раз закольцевался через конец диска на мастер бут
HD>естессно весь винт к чертям полетел.

А у меня файл закольцевался под Win 3.11, но давным давно. Тогда NT4 еще не было
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.