Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


nick_sniper ©   (2002-10-29 08:13:00) 

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

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


nick_sniper   (2002-10-29 12:22:00) [1]

>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)

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


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

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


Cobalt   (2002-10-29 08:56:00) [3]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо