Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.07;
Скачать: CL | DM;

Вниз

Как проверить правильность записанной дискеты?   Найти похожие ветки 

 
nick_sniper ©   (2002-10-29 08:13) [0]

Задача: на клиентском компьютере записывается файл на дискету. После этого нужно перечитать этот файл, т.к. нужно проверить нет ли сбоев и будет ли этот файл читаться на другом компьютере. Но файл считывается за доли секунды – система занесла его в кеш.

Вопрос: каким образом проверить качество записи файла?


 
Cobalt ©   (2002-10-29 08:56) [1]

showMessage("Выньте дискету");
<try_Read_Disk>
showMessage("А теперь засуньте ее взад");
<try_Read_File_Again>


 
Alx2 ©   (2002-10-29 09:02) [2]

>nick_sniper © (29.10.02 08:13)
попробуй прочесть файл, открывая его с флажком FILE_FLAG_NO_BUFFERING


 
nick_sniper ©   (2002-10-29 12:22) [3]

>Alx2 © (29.10.02 09:02)
Спасибо. Привожу код процедуры:

procedure VerifyFile(const FileName: string; ProgressControl: TControl);
var
CopyBuffer: Pointer;
Source: Integer;
FSize, BytesCopied, TotalCopied: Longint;
const
ChunkSize: Longint = 65536;
begin
GetMem(CopyBuffer, ChunkSize);
try
TotalCopied := 0;
FSize := GetFileSize(FileName);
Source := Integer(CreateFile(PChar(FileName), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING, 0));
if Source < 0 then
raise EFOpenError.CreateFmt(ResStr(SFOpenError), [FileName]);
try
{if ProgressControl <> nil then begin
SetProgressMax(ProgressControl, FSize);
SetProgressMin(ProgressControl, 0);
SetProgressValue(ProgressControl, 0);
end;}
repeat
BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize);
if BytesCopied = -1 then
raise EReadError.Create(ResStr(SReadError));
TotalCopied := TotalCopied + BytesCopied;
{if ProgressControl <> nil then
SetProgressValue(ProgressControl, TotalCopied);}
until BytesCopied < ChunkSize;
finally
FileClose(Source);
end;
finally
FreeMem(CopyBuffer, ChunkSize);
{if ProgressControl <> nil then
SetProgressValue(ProgressControl, 0);}
end;
end;



> Cobalt © (29.10.02 08:56)

Я и сам так умею ;)



Страницы: 1 вся ветка

Текущий архив: 2002.11.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
14-21801
Николай Быков
2002-10-11 19:46
2002.11.07
Делаю на заказ програмки абсолютно БЕСПЛАТНО


7-21836
max2057
2002-09-03 17:05
2002.11.07
NT файл систем дриверс


4-21866
TPig
2002-09-24 16:01
2002.11.07
Помогите с ACL!!!!!!!!!! Никак не удается получить список АСЕ


14-21772
Jackson
2002-10-18 21:55
2002.11.07
Hyper Terminal


4-21870
R0nin
2002-09-25 15:46
2002.11.07
Работа со шрифтами by WinAPI