Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Вниз

Памагите разобраться в ошибке!   Найти похожие ветки 

 
VitAngel   (2007-02-22 15:16) [0]

Вечер добрый! Вопрос такой: Дело в том, что у меня приложение работает нормально, а на чужом компе выдаёт ошибку "I\O Error XXXXX" (номер ошибки не помню). заметил только то, что когда прога при создании форма считывает с файла данные и вносит их на форму, из-за ошибки Edit"ы не запоняются. Подскажите что за ошибка


 
DrPass ©   (2007-02-22 15:21) [1]

У тебя какая-то ошибка ввода-вывода с неизвестным номером. Для ее исправления тебе нужно изменить какую-то процедуру или функцию в своей программе.


 
VitAngel   (2007-02-22 15:28) [2]

Ну раз я в момент загрузки приложения только считываю данные, следовательно ошибка в этом месте:

 fName := ExtractFilePath(Application.ExeName)+"config.txt";
 AssignFile(f, fName);
  {$I-}
 Reset(f);
  {$I+}

 i:=1;
 while not EOF(f) do
   begin
     readln(f, buf[i]);
     i:=i+1;
   end;

Где тут она может быть?


 
RASkov   (2007-02-22 15:32) [3]

> [2] VitAngel   (22.02.07 15:28)

С учетом, что этот же код на одном компьютере работает, криминального ничего нет....
Ошибка в другом месте.... Мало информации.


 
VitAngel   (2007-02-22 15:35) [4]

а может быть из-за того, что я этот блок вызываю в FormCreate двух форм?


 
RASkov   (2007-02-22 15:44) [5]

> [2] VitAngel   (22.02.07 15:28)

Обрати внимание на пути к программе у себя и на "чужом" компьютере
Все может быть, что на "чужом" файл fName недоступен, по каким либо причинам...

> [4] VitAngel   (22.02.07 15:35)

Нет, вряд-ли из-за этого
Хотя я не вижу CloseFile, но думаю, что просто забыл написать, иначе он(код) бы не на одном компе не работал бы, так как ты его вызываешь два раза.
Покажи полность метод, откуда этот кусок кода....


 
RASkov   (2007-02-22 15:52) [6]

> Хотя я не вижу CloseFile, но думаю, что просто забыл написать,
> иначе он(код) бы не на одном компе не работал бы, так как
> ты его вызываешь два раза.

Здесь я неправ.
Вообще-то отсутствие CloseFile прямую ошибку не вызовет...


 
VitAngel   (2007-02-22 15:52) [7]

Вот:

procedure TFConf.FormCreate(Sender: TObject);
var f: TextFile;
    fName: String[80];
    i: integer;
    buf :array[1..3] of string;
begin
 fName := ExtractFilePath(Application.ExeName)+"config.txt";
 AssignFile(f, fName);
  {$I-}
 Reset(f);
  {$I+}

 i:=1;
 while not EOF(f) do
   begin
     readln(f, buf[i]);
     i:=i+1;
   end;

 IP.Text:=buf[1];
 Port.Text:=buf[2];
 Name.Text:=buf[3];

 CloseFile(f);

end;

Во второй форме практически тоже самое:

procedure TFMain.FormCreate(Sender: TObject);
var f: TextFile;
    fName: String[80];
    i: integer;
    buf :array[1..3] of string;
begin
 fName := ExtractFilePath(Application.ExeName)+"config.txt";
 AssignFile(f, fName);
  {$I-}
 Reset(f);
  {$I+}

 i:=1;
 while not EOF(f) do
   begin
     readln(f, buf[i]);
     i:=i+1;
   end;

 if (buf[2]="") then
   ClientSocket1.Port:=0
 else
   ClientSocket1.Port:=StrToInt(buf[2]);

 CloseFile(f);
end;


 
RASkov   (2007-02-22 16:04) [8]

Единственное, на мой взгляд, место ошибки это:

fName := ExtractFilePath(Application.ExeName)+"config.txt";
AssignFile(f, fName);
 {$I-}
Reset(f);
 {$I+}
Т.е. не находится файл fName....
Попробуй вставить MessageBox

fName := ExtractFilePath(Application.ExeName)+"config.txt";
MessageBox("Файл "+fName);
AssignFile(f, fName);
 {$I-}
Reset(f);
 {$I+}
MessageBox("Opened");

Если второй месседж покажется на "чужой" машине, то тогда фик его знает :(
Ну и обрати внимание что покажет первый.
А этот config.txt одинаковый на обоих компах?
ЗЫ Здесь желательно использование try ... finally .. end;


 
RASkov   (2007-02-22 16:07) [9]

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

Эти  {$I-}.. {$I+} убери, или MessageBox("Opened"); до {$I+} поставь...


 
RASkov   (2007-02-22 16:09) [10]

И вот еще - обычно так делают:
fName := ExtractFilePath(Application.ExeName)+"config.txt";
try
 AssignFile(f, fName);
 Reset(f);
.......
finally
 CloseFile(f);
end;


 
RASkov   (2007-02-22 16:11) [11]

> MessageBox

Ну конечно ж ShowMessage();


 
VitAngel   (2007-02-22 16:14) [12]

Я щас убрал две строки:

{$I-}
{$I+}

И он выдал ошибку "I\O error 123"...


 
VitAngel   (2007-02-22 16:19) [13]

нее это я прогнал...теперь не выдаёт


 
VitAngel   (2007-02-22 16:20) [14]

кстати, зачем вообще нужны
{$I-}
{$I+} ?


 
RASkov   (2007-02-22 16:36) [15]

> [14] VitAngel   (22.02.07 16:20)

А нафига ты их ставил? :)
Отключение/включение контроля ввода/выода... Посмотри на [10].


 
RASkov   (2007-02-22 16:39) [16]

> /выода
*/вывода
используй блоки исключительных ситуаций(или как их там) try except end; try finally end;


 
Desdechado ©   (2007-02-22 16:59) [17]

Прав доступа к файлу нет?
Или он R\O


 
Loginov Dmitry ©   (2007-02-22 18:41) [18]

> И вот еще - обычно так делают:
> fName := ExtractFilePath(Application.ExeName)+"config.txt";
>
> try
> AssignFile(f, fName);
> Reset(f);
> .......
> finally
> CloseFile(f);
> end;


Вообще-то обычно так:


AssignFile(f, FileName);
Reset(f);
try
  { do something here }
finally
  CloseFile(f);
end;


(c) F1


 
RASkov   (2007-02-22 19:30) [19]

> [18] Loginov Dmitry ©   (22.02.07 18:41)
> AssignFile(f, FileName);
> Reset(f);
> try
>  { do something here }
> finally
>  CloseFile(f);
> end;


Тогда уж так
AssignFile(f, FileName);
try
try
 Reset(f);
 { do something here }
except
{обрабатываем ошибку}
end;
finally
 CloseFile(f);
end;

Иначе Reset как-то неловко поставлен...


 
Loginov Dmitry ©   (2007-02-22 19:35) [20]

> Иначе Reset как-то неловко поставлен...


Кроме Вас так никто не считает.


 
RASkov   (2007-02-22 20:03) [21]

> [20] Loginov Dmitry ©   (22.02.07 19:35)

Чё-та я загнался.. согласен, но помоему все равно как то некрасиво, и вот так получше должно быть

 AssignFile(f, FileName);
 try
  Reset(f);
  try
   { do something here }
  finalli
   CloseFile(f);
  end;
 except
  {обрабатываем ошибку}
 end;


 
Loginov Dmitry ©   (2007-02-22 20:38) [22]

Так пойдет.


 
RASkov   (2007-02-22 20:45) [23]

> [22] Loginov Dmitry ©   (22.02.07 20:38)
Так пойдет.

Ну спасибо :) (если это мне было сказано) (:

Что-то автор вопроса куда-то пропал... наверное побег испытывать на чужом компьютере...


 
Anatoly Podgoretsky ©   (2007-02-22 22:48) [24]

> RASkov  (22.02.2007 16:39:16)  [16]

C какой это стати блок try finally end является блоком исключительных ситуаций?


 
RASkov   (2007-02-23 00:44) [25]

> [24] Anatoly Podgoretsky ©   (22.02.07 22:48)

Ну а как его еще назвать - механизм обработки исключительных ситуаций (с) М.Кэнту
Delphi - это мое хобби, меня этому никто не учил, поэтому в терминах(названиях) могу путаться.... сорри.


 
Германн ©   (2007-02-23 01:45) [26]


> Anatoly Podgoretsky ©   (22.02.07 22:48) [24]
>
> > RASkov  (22.02.2007 16:39:16)  [16]
>
> C какой это стати блок try finally end является блоком исключительных
> ситуаций?
>

Анатолий. Вроде бы мы тут, на форуме, уже давно пришли к общему пониманию, что вопрос терминологии один из самых сложных, если не самый! Имхо, блок try finally end "является, таки, блоком исключительных ситуаций" поскольку предназначен для того, чтобы даже при возникновении исключения, выполнить определённую часть программного кода!


 
Anatoly Podgoretsky ©   (2007-02-23 17:44) [27]

> Германн  (23.02.2007 01:45:26)  [26]

Да, ну?
Ну тогда попробуй

try
  S := "Оба на";
finally
  ShowMessage(S);
end;

Вот она оба на


 
RASkov   (2007-02-23 18:24) [28]

> [27] Anatoly Podgoretsky ©   (23.02.07 17:44)

Так оно не для этого же:
Y:=0;
try
 S := "Оба на";
 N:= X div Y;
 S:=S+" на абО";
finally
 ShowMessage(S);
end;
Что будет в S? и вариант без finally:
begin
 Y:=0;
 S := "Оба на";
 N:= X div Y;
 S:=S+" на абО";
 ShowMessage(S); // Здесь мы вообще пролетаем.
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.062 c
15-1171879112
Ega23
2007-02-19 12:58
2007.03.18
В Delphi7 - Project Manager


3-1166546496
KIR
2006-12-19 19:41
2007.03.18
FastReport 2.54 При печате печатает "кракозябликами"


4-1162561230
Igor_thief
2006-11-03 16:40
2007.03.18
Проблема с IternetCrackURL (wininet)


15-1172092407
Gero
2007-02-22 00:13
2007.03.18
Креативные часы от Лебедева


1-1169464262
Степан
2007-01-22 14:11
2007.03.18
Запись в автозапуск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский