Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 08:06   #1
DedBoroda
Пользователь
 
Аватар для DedBoroda
 
Регистрация: 15.08.2010
Сообщений: 49
Восклицание Чтение файла с cd

Читаю файл с диска с помощью процедуры:

Код:
var f1:file of byte;
Код:
procedure ReadFileCD;
var i:integer;
    buf:byte;
    arr:array of byte;
    len:integer;
    Stream : TMemoryStream;
begin
i := 0;
assignfile(f1,'F:\data\1\1.x');
reset(f1);
Len := FileSize(f1);
SetLength(Arr, Len);
while not eof(f1) do
  begin
    BlockRead(f1, buf, 1);
    buf := Ord(Chr(255-buf));
    arr[i] := buf;
    inc(i);
  end;
closefile(f1);
Stream := TMemoryStream.Create;
Stream.SetSize(Len);
Stream.Write(Pointer(Arr)^, Len);
Stream.Position := 0;
main.image1.Picture.Graphic.LoadFromStream(Stream);
Stream.Free;
end;
При выполнении reset(f1) ошибка File access denied и всё. В чем проблема? Как это исправить или обойти? Файл нужно читать побайтово.
DedBoroda вне форума Ответить с цитированием
Старый 23.10.2010, 08:44   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

потому что по умолчанию файл пытается открыться в режиме Read/Write (даже по reset() )
попробуйте так:
Код:
  assignfile(f1,'F:\data\1\1.x');
  FileMode := 0;
  reset(f1);
но, вообще-то, в Delphi есть TFileStream - ими пользоваться удобнее. Рекомендую рассмотреть возможность переписать код под этот стандартный компонент.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2010, 12:18   #3
DedBoroda
Пользователь
 
Аватар для DedBoroda
 
Регистрация: 15.08.2010
Сообщений: 49
По умолчанию

спасибо, FileMode := 0; помогло. К тому же повысилась скорость обработки файлов.
DedBoroda вне форума Ответить с цитированием
Старый 24.10.2010, 19:25   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

чтобы еще более повысить скорость, советую читать блоками(в массив допустим).
да и у потока размер ставить поидее не обязательно, при записи он сам это сделает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение файла Serjuk Помощь студентам 1 15.05.2010 20:42
чтение из файла dedokk1234 Общие вопросы C/C++ 0 15.06.2009 19:10
чтение из файла. aschak Общие вопросы C/C++ 9 30.12.2008 15:24
Чтение из файла e@gle Общие вопросы Delphi 3 14.12.2008 17:21
Чтение из файла Arkuz Общие вопросы Delphi 14 08.10.2008 19:52