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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.09.2009, 13:26   #1
Flame_of_Death
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 22
По умолчанию I/O error 183, очень странно...

Среда: Delphi 7
Код:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
dous_file: TextFile;
begin
{$IOChecks off}
MkDir('outfiles');
{$IOChecks on}
if RadioButton1.Checked = True then
  begin
AssignFile(dous_file, GetEnvironmentVariable('USERPROFILE')+'\outfiles\dou_4041_'+logfilename+'.txt');
  end;
if RadioButton2.Checked = True then
  begin
AssignFile(dous_file, GetCurrentDir+'\outfiles\dou_4041_'+logfilename+'.txt');
  end;
{$IOChecks off}
  ReWrite(dous_file);
  if IOResult <> 0 then
    begin
    MessageDlg ('Ошибка создания файла ', mtError,[mbOk],0);
    exit;
  end;
{$IOChecks on}
end;
Ошибка: I/O error 183
P.S. Переменная logfilename не пустая, при запуске программы ей присваивается уникальное значение.
Ошибка вылетает на строке: ReWrite(dous_file);
Хотя файл создается успешно, пример имени: dou_4041_22092009171919.txt
Помогите разобраться с данной проблемой, я понимаю, что ошибка может быть крошечной, но вот хоть убейте - не вижу.

Заранее спасибо за помощь!

Последний раз редактировалось Flame_of_Death; 22.09.2009 в 13:28.
Flame_of_Death вне форума
Старый 22.09.2009, 13:32   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

А GetCurrentDir тебе точно то значение возвращает, которое ты ожидаешь????
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума
Старый 22.09.2009, 13:52   #3
Flame_of_Death
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 22
По умолчанию

Возвращает текущую рабочую папку, т.е. мой рабочий стол, при необходимости на нем же создается папка outfiles.

Только что попробовал, вывелся путь на рабочий стол, создался файл dou_4041_22092009174935.txt. Но при ReWrite(dous_file); снова 183...
Flame_of_Death вне форума
Старый 22.09.2009, 13:56   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Да что там смотреть!
Жуткий код!
1) AssignFile ошибку никогда не даст ошибку. ни при каких условиях.. Зачем при этом выключать проверку ошибок - не ясно!
2) зачем КАЖДЫЙ раз создавать папку 'outfiles', при чём в каталоге запуска программы, при чём не зависимо от того, есть такая папка, нет... ЗАЧЕМ!?
3) если ни RadioButton1, ни RadioButton2 не выбраны, переменная dous_file вообще не будет задана!
4) ошибки можно ловить в try except
например, в except выведите имя файла, который пытаетесь создать...
5) файл закрывать не забываете?!

ужасъ
Serge_Bliznykov вне форума
Старый 22.09.2009, 15:20   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для начала хотя бы так поправь:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
dous_file: TextFile;
begin
MkDir('outfiles');
if RadioButton1.Checked = True then
  begin
AssignFile(dous_file, GetEnvironmentVariable('USERPROFILE')+'\outfiles\dou_4041_'+logfilename+'.txt');
  end;
if RadioButton2.Checked = True then
  begin
AssignFile(dous_file, GetCurrentDir+'\outfiles\dou_4041_'+logfilename+'.txt');
  end;
if RadioButton2.Checked or RadioButton1.Checked then begin
  ReWrite(dous_file);
  if IOResult <> 0 then
    begin
    MessageDlg ('Ошибка создания файла ', mtError,[mbOk],0);
    exit;
  end;
end;
end;
I'm learning to live...
Stilet вне форума
Старый 23.09.2009, 06:17   #6
Flame_of_Death
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) AssignFile ошибку никогда не даст ошибку. ни при каких условиях.. Зачем при этом выключать проверку ошибок - не ясно!
2) зачем КАЖДЫЙ раз создавать папку 'outfiles', при чём в каталоге запуска программы, при чём не зависимо от того, есть такая папка, нет... ЗАЧЕМ!?
3) если ни RadioButton1, ни RadioButton2 не выбраны, переменная dous_file вообще не будет задана!
4) ошибки можно ловить в try except
например, в except выведите имя файла, который пытаетесь создать...
5) файл закрывать не забываете?!
1. Без комментариев.
2. Код делался на скорую руку, дальше будут прорабатываться все детали, в том числе и эта.
3. RadioButton2 установлен по умолчанию как True, после начала обработки изменение параметров RadioButton блокируется.
4. Попробую.
5. Так я же его даже открыть не успеваю, или я не так Вас понял?
Flame_of_Death вне форума
Старый 23.09.2009, 08:20   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
2. Код делался на скорую руку, дальше будут прорабатываться все детали, в том числе и эта.
не обижайтесь, но на скорую руку надо писать ПРОСТОЙ и гарантированно РАБОЧИЙ код, который потом можно усложнять (сохраняя его работоспособность, разумеется).
Написав быстренько запутанно и сложно - получите труднопонимаемый и сложноотлаживаемый код...
Впрочем, я это пишу не для того, чтобы как-то Вас обидеть, а для того, чтобы Вы росли профессионально!

Цитата:
3. RadioButton2 установлен по умолчанию как True, после начала обработки изменение параметров RadioButton блокируется.
В данном случае согласен, похоже, что это не влияет на возникающую ошибку... но вообще не согласен. Писать надо так, чтобы малейшее изменение, которые будут сделаны в компонентах (выключение True, например, или добавление ещё одного radiobutton) не приводили к полному краху алгоритма!

Цитата:
5. Так я же его даже открыть не успеваю, или я не так Вас понял?
Так я же Ваш проект не отлаживал! Откуда я знаю, успеваете Вы файл открыть или нет!?
Не исключаю, что первое нажатие на Button3 проходит "молча"... Повторное нажатие — выдаёт Вам ошибку...

А ещё есть такая замечательная штука - DEBUGGING (ОТЛАДКА). поставьте точку останова в начале процедуры и пройдитесь пошагово...

p.s. сделайте маленький тестовый проект, запакуйте его исходники в архив и выложите сюда, на форум.
Вам легче будет помочь..

Удачи.
Serge_Bliznykov вне форума
Старый 23.09.2009, 08:20   #8
Flame_of_Death
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 22
По умолчанию

Тема закрыта, переписал код заново, проблема решилась)
Flame_of_Death вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странно ..... HellMercenariess О форуме и сайтах клуба 1 07.08.2009 12:55
откуда ошибка 183? vl1639 Общие вопросы Delphi 4 17.01.2009 01:11
Тouch Pad. Очень странно... Elm0 Компьютерное железо 2 11.03.2008 10:01
Странно Viteef Свободное общение 10 03.07.2007 03:28
Помогите, очень странно... nonono Общие вопросы Delphi 3 23.05.2007 23:39