Форум: "Начинающим";
Текущий архив: 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....
Попробуй вставить MessageBoxfName := 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.043 c