Форум: "Основная";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];
Вниз
Как проверить правильность записанной дискеты? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c