Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-21539
AndreyAG
2002-10-29 09:57
2002.11.07
TStrings


1-21512
Separator
2002-10-29 07:23
2002.11.07
Адресное пространство


4-21871
volodya_
2002-09-25 17:11
2002.11.07
hook


14-21805
Serik
2002-10-17 16:16
2002.11.07
Помогите найти компонент для работы с com портом


1-21461
Luke
2002-10-24 20:41
2002.11.07
Поиск директорий





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский