Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
3-21366
Ренат
2002-10-17 12:16
2002.11.07
Две базы в одном запросе


3-21358
Toshanius
2002-10-20 14:10
2002.11.07
Помогите програмно очистить Table


1-21662
Vadia
2002-10-27 22:55
2002.11.07
Помогите! Нужна прога поиска производных функций


4-21881
Prok12
2002-09-23 15:55
2002.11.07
Как


4-21854
progger
2002-09-24 20:26
2002.11.07
Почему не выходит?




   Наверх