Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка ввода-вывода 
:(
    Опции темы
Illusion Dolphin
  Дата 5.2.2004, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Что-то я уже совсем в ауте butbut.gif. Пишу простой код(это НУ ОЧЕНЬ упрощённая одна процедурка, которая в OnCreate работает):
Код

procedure TForm1.FormDestroy(Sender: TObject);
var f1:textfile; const filename = 'C:\temp\1.dat';
begin
system.assign(f1,filename);
try
system.rewrite(f1);
finally
system.close(f1);
end;
end;


Код выдаёт "File NOT FOUND"

Папка 'C:\temp\' существует. Файл ничем не занят, никакой другой программой не открыт (проверял сканингом всех handle). я пробовал открывать файл с помощью reset (существующий), но пишет то же самое, даже если перед этим поставить
Код

If not fileexists(filename) THEN exit;

то оно проходит дальше (файл находит), но при попытке открыть\перезаписать\добавить он не находится.

так что происходит? Почему выходит ошибкаconfused.gif


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 5.2.2004, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Попробуй использовать AssignFile за место Assign


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Serggggg
Дата 5.2.2004, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.12.2003
Где: Донецк, Украина

Репутация: нет
Всего: нет



И точно так же с CloseFile.
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
Illusion Dolphin
Дата 5.2.2004, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Не помогает... Я для разнообразия написал Assign...
Вот... Уже нашёл кое-что:
Код

procedure TForm1.erase_(Sender: TObject);
var f1,f2:textfile;
begin
try
assignfile(f1,getcurrentdir+'\sound.wav');
assignfile(f2,getcurrentdir+'\gothicg_.ttf');
Filesetattr(getcurrentdir+'\gothicg_.ttf',0);
Filesetattr(getcurrentdir+'\sound.wav',0);
{$I-}
erase(f1);
erase(f2);
{$I+}
finally
end;
end;

Эта процедурка вызывалась перед этим... После модификаци вот так:
Код

procedure TForm1.erase_(Sender: TObject);
var f1,f2:textfile;
begin
if fileexists(getcurrentdir+'\sound.wav') then
begin
assignfile(f1,getcurrentdir+'\sound.wav');
Filesetattr(getcurrentdir+'\sound.wav',0);
{$I-}
erase(f1);
{$I+}
end;
if fileexists(getcurrentdir+'\gothicg_.ttf') then
begin
assignfile(f2,getcurrentdir+'\gothicg_.ttf');
Filesetattr(getcurrentdir+'\gothicg_.ttf',0);
{$I-}
erase(f2);
{$I+}
end;
end;

Всё вроде заработало... Где капитальная ошибка в erase_??? Почему он влияет на последующее открытие файлов, если он не юзает те файлы, которые я после пытаюсь открыть??


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 5.2.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Illusion Dolphin А ты уверен, что GetCurrentDir возвращает нужную тебе директорию? Например, если у тебя в проекте есть TOpenDialog, то он (если не отключить опцию одну) изменяет текущую директорию при его использовании.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Illusion Dolphin
Дата 5.2.2004, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Уверен на 100%, это моя процедура, которая вырезает из имена экзешника директорию, где он расположен. Ты пурепутал её с функцией getcurrentdirectory... Вопрос остаётся открытым: почему не работало?


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 6.2.2004, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



А ты случайно не удалял Erase'ами несуществующие файлы ?



--------------------
С уважением, г-н Посол.
PM   Вверх
Illusion Dolphin
Дата 6.2.2004, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Да, удалял... А, может, и не удалял... Но удалял я (точнее на вякий слуячай пытался) в oncreate, а тут уже удалял сущ. файлы. А это очень страшно? Что из-за этого происходит?

Это сообщение отредактировал(а) Illusion Dolphin - 6.2.2004, 09:48


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 6.2.2004, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Вот тебе Erase и выдавал "File not found", раз ты пытался удалить несуществующий файл при включенной проверке I/O {$I+}. То что было после Erase не выполнялось (Rewrite'ы всякие)...



--------------------
С уважением, г-н Посол.
PM   Вверх
StayAtHome
Дата 7.2.2004, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


Профиль
Группа: Участник
Сообщений: 456
Регистрация: 26.1.2004
Где: Украина

Репутация: 1
Всего: 16



Illusion Dolphin
Кстати, файлы, случаем не read-only?
PM MAIL WWW ICQ YIM   Вверх
Illusion Dolphin
Дата 7.2.2004, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



p0s0l, по-моему ты был прав... я как-то и не подумал... Значит, функция ioresult возвращала "старую" ошибку, но тогда интересно, как бы значение этой функции "обнулить", чтобы не возникало подобных ошибок?

StayAtHome
Код

Filesetattr(getcurrentdir+'\gothicg_.ttf',0);  //!



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 7.2.2004, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Если у тебя Erase без {$I-}, то при ошибка вываливается окно, и выполнение процедуры прекращается...
Если у тебя {$I-} Erase() {$I+}, то тут если произойдет ошибка, то окно с ошибкой не появится, и IOResult вернет код ошибки, но главное - что выполнение процедуры продолжится.
Но есть моменты, вот различные варианты:
Код
Assign(f1, <файла, которого нет>);
{$I-}
Erase (f1);
{$I+}
Assign(f2, 'abc.dat');
Rewrite(f2); // тут вывалится ошибка, что файла нет - это осталось от Erase

С проверкой IOResult всё будет нормально:
Код
Assign(f1, <файла, которого нет>);
{$I-}
Erase (f1);
{$I+}
IOResult; // просто проверяем IOResult, ничего не предпринимая
Assign(f2, 'abc.dat');
Rewrite(f2); // тут будет всё ОК

А если просто сделать {$I-}, но не делать {$I+}:
Код
Assign(f1, <файла, которого нет>);
{$I-}
Erase (f1);
Assign(f2, 'abc.dat');
Rewrite(f2); // тут будет всё ОК




--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1135 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.