Главная страница
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.016 c
6-21699
BillyJeans
2002-09-05 10:36
2002.11.07
Нужна прога под NT, которая считает трафик...


4-21864
lds78
2002-09-24 14:01
2002.11.07
прицепить dll к чужому процессу


14-21765
dim-
2002-10-18 01:09
2002.11.07
IBExpert


1-21641
TarantuL
2002-10-27 15:19
2002.11.07
Можно ли послать ProcessMessages от имени другого преложения?


14-21822
Axel
2002-10-16 18:07
2002.11.07
Стив Тейксейра, Ксавье Пачеко. Borland Delphi 5.