Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > I/O Error 103


Автор: TDM 10.4.2008, 23:04
Все программы которые открываю открывающие файл через reset падают этой ошибкой, непойму в чём дело, раньше всё было нормально. Открываемый файл есть. Интересно что возникает ошибка только если оспользовать глобальные пути.
Вот код который не работает:
Код

var
 f    : TextFile;
begin
  AssignFile(f, 'c:\model.txt');
  Reset(f);


А этот работает:
Код

var
 f    : TextFile;
begin
  AssignFile(f, 'model.txt');
  Reset(f);

Автор: WaReZMEN 11.4.2008, 00:31
TDM, может C  По русский написал? А еще может прав нет на диск....

Автор: TDM 11.4.2008, 00:52
путь пишет openDialog,
если нет прав то почему TFileStream всё читает и пишет?

Автор: Данкинг 11.4.2008, 01:12
Цитата(TDM @ 11.4.2008,  00:04)
раньше всё было нормально. 

А что изменилось с тех пор, когда было нормально? ИМХО надо в этом разобраться, так как в двух строчках ошибки быть не может, да и нет там её.

Автор: TDM 11.4.2008, 01:22
Данкинг, 
Купил новый комп, вот и всё собственно. Винда та же. Если грузить файл через TStringList то всё почти нормально.

Автор: Wolfgan 11.4.2008, 04:43
Попробуй поставить дерективу компилятора перед началом чтения.
Код

  {$I-}
  Reset(f); 
  {$I+}

Советую почитать про дериктивы, много нового узнаешь. Это отключает/включает системную проверку на файловый ввод/вывод. У меня как то тоже была такая трабла. В чем прикол я не понял , но деректива помогла. 

Автор: Poseidon 11.4.2008, 08:34
Цитата(TDM @  11.4.2008,  00:52 Найти цитируемый пост)
путь пишет openDialog,
А по-моему пусть задан в ручную и openDialog'ом вообще не пахнет! И не NTFS там случаем? Права на файл есть? Может c:\model.txt и model.txt вообще разные файлы?

Автор: Mikh@il 11.4.2008, 10:04
  Ошибка 103 выдается на   CloseFile, Read, Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead, BlockWrite.
  На Reset, Rewrite выдается ошибка 102.
  Так сказано в Help.

Автор: Wolfgan 11.4.2008, 11:28
А что тебе мешает эти функции в директиву занести? Хотя может трабла гдето в другом месте. Давно было это не вспомню ща как решил проблему.  Я примерно так делал:
Код

var
  f: TextFile; // файл
  fName: String[80]; // имя файла
  buf: string[80]; // буфер для чтения из файла
begin
  {$!-}
  fName := Edit1.Text; 
  AssignFile(f, fName);
  Reset(f); // открыть для чтения
  
  if IOResult <> 0 then
  begin
    MessageDlgt 'Ошибка доступа к файлу ' + fName,
      mtError, [mbOk], 0); exit;
  end;

  // чтение из файла
  while not EOF(f) do
  begin
    readln(f, buf); // прочитать строку из файла
    Memo1.Lines.Add(buf); // добавить строку в поле Memo1
  end;

  CloseFile(f); // закрыть файл
{$I+}

Автор: SlaUr 11.4.2008, 13:53
Может файл уже кем-то ипользуется ?
Попробуйте перед Reset :
Код

FileMode:=0


и посмотрите все таки ioresult:

Код

{$I-}Reset(F2){$I+};
ShowMessage(IntToStr(IOResult));


Автор: TDM 11.4.2008, 14:16
Файл никем не используется, в другом месте трабл нет, куча прог которые раньше работали с использованием reset сейчас выдают ошибку 103
Poseidon, 
Путь задаёт opendialog просто тут я написал вручную. Система именно NTFS а что?

Mikh@il, 
А у меня компилятор на reset ругается, странно

SlaUr, 
IOResult = 103

Wolfgan, 
Если отключить вывод ошибок то тогда всё работает. Очень интересно почему.

Автор: SlaUr 11.4.2008, 14:30
Цитата

Путь задаёт opendialog просто тут я написал вручную

А вы попробуйте так как вначале написали - явно указать путь ,без opendialoga

Или проверьте 
Код

ShowMessage(opendialog1.FileName)

Автор: Mikh@il 11.4.2008, 14:35
А на этом файлике случайно атрибут "Только чтение" не стоит?

Автор: TDM 11.4.2008, 14:39
SlaUr, 
Думаешь я не пробовал? Кароче поверь файл есть и путь правильный

Автор: Mikh@il 11.4.2008, 14:58
А попробуй запустить на выполнение не из среды Delphi, а из скомпилинного exe. Может файлик сама Dephi держит!

Автор: TDM 11.4.2008, 15:01
пробовал

Автор: SlaUr 11.4.2008, 15:03
Цитата

var f: TextFile


Вообще-то я всегда писал просто (по старинке)
Код

var f:text;

и с Reset никогда проблем не было.
Попробуй поменять а то я уже и не знаю что предложить больше.



p.s. да кстати а не под vistу ли вы пересели?

Автор: Mikh@il 11.4.2008, 15:19
А файлик точно текстовый? Не типизированный случайно?

Автор: shurik_catfish 11.4.2008, 15:22
Ну и совсем уж маловероятное предлположение а вы в него писать ничего не пытаетесь?...
типа
writeln(f,......)

Автор: Poseidon 11.4.2008, 16:48
Раз NTFS, то проверь права доступа к файлу для твоего пользователя.

Автор: TDM 11.4.2008, 17:54
Poseidon, 
Ну stringList и tfilestream доступ имеют, и всё загружают, значит доступ есть.


shurik_catfish, 
Только readln


Mikh@il, 
Такую тупую ошибку я б заметил.


SlaUr, 
Я на хр

Автор: Esperito 11.4.2008, 18:39
Файлик-то точно есть? Проверял? smile
А то может в папке с проектом он есть, а на диске С нету. Или ты во втором случае саму прогу переписываешь в корень диска С?

Автор: TDM 11.4.2008, 20:11
Да блин есть файл! Он и на Ц и в папке с проектом

Автор: Mikh@il 11.4.2008, 21:16
Запакуй свой проектик и файлик и на форум, думаю так быстрее разберемся в чем трабл и вопросов не будет типа есть файлик или нету.

Автор: TDM 12.4.2008, 01:14
Mikh@il, 
Пожалуста!
Код

var f:file;
begin
assignfile(f,'c:\model.txt');
reset(f);
closefile(f);
end.

Автор: Mikh@il 12.4.2008, 08:20
var f:file;  --- ????


при var var f:Textfile;


У меня все чудестно отрабатывает!

BDS2006   WinXP   NTFS


Автор: TDM 12.4.2008, 19:50
Ну а у меня нет, ни при file ни при textfile

Автор: Mikh@il 12.4.2008, 19:59
Ищи трабл в ОС!

Автор: SlaUr 13.4.2008, 22:39
При var f:file,Попробуй Reset(f,1)

Еще вариант попробовать открыть файл не с винта а например с флэшки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)