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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка 183 - если файл открыт в процедуре? как исключить появление ошибки 
V
    Опции темы
vl1639
Дата 16.1.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Открываю файл для записи в основной программе, - все вроде нормально. Чтоб разгрузить программу - выношу в одну из процедур присоединение и открытие файла, и запись в него и - на операторе ReWrite(f) - вылезает ошибка "I/O error 183" и программа стопорится. Года два назад я уже наступал на эти грабли и мне что- то здесь посоветовали, но я так редко программирую, что не записавши,  все позабыл. Помогите советом и простите за бестолковость. Наверное что-то элементарное упускаю.
PM MAIL   Вверх
hkdkest
Дата 17.1.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может ты два раза Rewrite используешь, т.е. когда файл занят
PM MAIL WWW   Вверх
Christoph
Дата 17.1.2009, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Покажи код


--------------------
user posted image
PM MAIL ICQ   Вверх
Данкинг
Дата 17.1.2009, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Глюк с открытием файла какой-то. Без кода действительно ничего не понять. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
vl1639
Дата 17.1.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот, я попробовал выделить отдельно обращение к процедуре, в которой надо записать файл в  другую папку 
Код

unit newmain;
interface
uses
  Windows,newunit, Forms, Classes, Controls, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
begin
  GetDir(0,mydir);
  newdir:=mydir+'\dop';
  MkDir(newdir);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 myproc;
end;
end.
=================================
unit newunit;
interface
Var
 mydir,newdir :string;
Procedure myproc;
implementation
Procedure myproc;
var ff:TextFile;
begin
 ChDir(newdir);
 Assign(ff,'11.txt');
 ReWrite(ff);
   WriteLn('Hello');
 CloseFile(ff);
 ChDir(mydir);
end;
end.

PM MAIL   Вверх
Rrader
  Дата 17.1.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



vl1639, 183 ошибка означает следующее:
Цитата

Невозможно создать файл, так как он уже существует

Работаешь паскалевским методом - сделай проверку, есть ли уже такая директория, вроде такой:
Код

procedure TForm1.FormActivate(Sender: TObject);
begin
  GetDir(0, MyDir);
  NewDir := MyDir + '\dop';
  if not DirectoryExists(NewDir) then
    MkDir(NewDir);
end;

И еще:
Цитата

WriteLn('Hello');

файл забыл:
Код

WriteLn(ff, 'Hello');



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
vl1639
Дата 17.1.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



to Rrader:
1.В этом примере ошибка исчезла. Посмотрю попозже в полном коде, где такого типа операций поболее.
Я знал, что означает ошибка 183, и знал, что файла не существовало к моменту создания. Но почему ошибка вылезала на операции с файлом, а не с директорией? (а WriteLn(ff, 'Hello') - это просто описка в сообщении) 
2.А непаскалевским методом как бы это выглядело, если нетрудно - поясни? 
PM MAIL   Вверх
Rrader
  Дата 17.1.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



Цитата(vl1639 @  17.1.2009,  23:22 Найти цитируемый пост)
2.А непаскалевским методом как бы это выглядело, если нетрудно - поясни? 

Тут по-разному можно, через список можно, через потоки можно.
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFilePath(ParamStr(0)) + 'dpo' + PathDelim;
  ForceDirectories(Path);
  SetCurrentDirectory(PChar(Path));
  with TStringList.Create do
  try
    Append('Hello');    
    SaveToFile('11.txt');
  finally
    Free;
  end;
end;


Добавлено @ 17:38
Цитата(vl1639 @  17.1.2009,  23:22 Найти цитируемый пост)
Но почему ошибка вылезала на операции с файлом, а не с директорией?

В приведенном коде эта ошибка вываливалась на MkDir(NewDir); остальное все в норме...

Это сообщение отредактировал(а) Rrader - 17.1.2009, 17:39


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
vl1639
Дата 19.1.2009, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



To Rrader 
1.Спасибо за пример. Почитал про процедуры и функции из этого класса- для моих задач, похоже, 
ничего не упрощается и функционально не расширяется. 
2.Кажется тему надо закрыть, но все же почему ошибка I/O вылезает у меня на ReWrite, хотя исключение 
формировалось на MkDir. У меня в реальной программе между этими операторами десятки других и 
обращения к процедурам(но все не из класса I/O). Это смущает. Может у меня в Delphi6 чего-то 
недоставлено? Помнится, давно еще, когда я устанавливал, я для экономии места много чего поотменял. 
Может чего-то доставить?  
PM MAIL   Вверх
Rrader
  Дата 19.1.2009, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



Цитата(vl1639 @  19.1.2009,  14:31 Найти цитируемый пост)
2.Кажется тему надо закрыть, но все же почему ошибка I/O вылезает у меня на ReWrite, хотя исключение формировалось на MkDir.

Нужен весь код, тогда можно будет говорить о причине.
Цитата(vl1639 @  19.1.2009,  14:31 Найти цитируемый пост)
 У меня в реальной программе между этими операторами десятки других и обращения к процедурам(но все не из класса I/O).

Вот-вот smile 
Цитата(vl1639 @  19.1.2009,  14:31 Найти цитируемый пост)
Может у меня в Delphi6 чего-то недоставлено? Помнится, давно еще, когда я устанавливал, я для экономии места много чего поотменял. Может чего-то доставить?  

RTL ты не исключишь. Все в норме.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
vl1639
Дата 19.1.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата Rrader    Дата 17.1.2009, 17:37  
Цитата

В приведенном коде эта ошибка вываливалась на MkDir(NewDir); остальное все в норме...


В приведенном сокращенном коде останов с сообщением об ошибке у меня стабильно возникает в процедуре с полосой на ReWrite  (при наличии создаваемой поддиректории и отсутствии в ней открываемого файла). А в полной программе было то же самое и это запутывало.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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