Форум: "Основная";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
ВнизСтранное поведение AssignFile( ) - короче не работает, а почему? Найти похожие ветки
← →
Сергей (2002-12-25 20:39) [0]Вводные такие
Delphi 6, win 98.
Процедура записи в файл
.......
var
F : TextFile;
S : String;
begin
S := "C:\temp\test.txt";
AssignFile(F,S);
// прокатывает
Rewrite(F); // I/O error "File not found"
Вызов идет из процедуры класса формы, которая создается в run time (т.е. ее копия не создается при запуске программы).
Процедура FileOpen и FileCreate работают здесь нормально.
Если я выдираю упомянутую форму из проекта и тестирую ее как отдельное приложение с созданием копии класса при запуске - все нормально.
Где же я мудак? - т.е. как правильно вызвать AssignFile (ну очень хочется иметь интерфейс текстового файла в етом месте).
Ответы плз, пишите на мыло, так как в инете бываю редко.
Спас.
← →
Rouse_ (2002-12-25 20:45) [1]Ошибка не здесь, где-то в другом месте
Желаю успехов
← →
Сергей (2002-12-25 20:52) [2]Да, забыл добавить, что F - локальная переменная.
Какой еще может быть вариант?
Допустим ли такое код?
var
T1 : TextFile;
imlementation
proc 1
begin
AssignFile(T1, "C:\test1.txt");
Rewrite(T1);
end;
proc 2
T2 : TextFile;
begin
AssignFile(T2, "C:\test2.txt");
Rewrite(T2);
//будет ли тут возникать ошибка
end;
Может ето мой случай?
← →
Morfein (2002-12-25 21:03) [3]А может у тебя действительно файла нету? %))
А если есть, то зачем ты привязался к этому методу?... Чё, WinAPI теперь не в моде?
CreateFile или открывает иили создаёт файл, или тестирует его наличие... быстро, выгодно, удобно!
← →
Сергей (2002-12-25 21:07) [4]Дык, сделать то все можно, только это вопрос времени (сколько его уйдет на хелпы по API, c учетом того, что пользую я его весьма ограничено). И ваще, вопрос принципиальный... Глюк ето неописанный или я дурак (второе конечно вероятней)
← →
Rouse_ (2002-12-25 21:15) [5]> Morfein © (25.12.02 21:03)
А какая разница есть или нет? Автор указал что у него Rewrite, здесь до балды, если нет то он сам создасться
> Сергей (25.12.02 20:52)
Код работоспособный
Желаю успехов
← →
Morfein (2002-12-25 21:16) [6]Ты не ответил, есть ли у тебя файл... А вообще, пришли прогу на мыло... мож чего скажу
← →
Сергей (2002-12-25 21:27) [7]файла нет. Он должен создаваться после вызова Rewrite. Указанный путь существует. А прогу целиком слать - мазы нет, так много кб Ж)
← →
Morfein (2002-12-25 21:30) [8]Ну как знаешь %))
← →
Anatoly Podgoretsky (2002-12-25 21:30) [9]Ты пишешь "Если я выдираю упомянутую форму из проекта и тестирую ее как отдельное приложение с созданием копии класса при запуске - все нормально." - это говорит о том, что проблема у тебя в другом месте.
Возможно переопределен AssignFile мли Rewrite
← →
gsu (2002-12-25 21:32) [10]var
F : TextFile;
S : String;
begin
S := "C:\temp\test.txt";
AssignFile(F,S);
Rewrite(F);
CloseFile(f);
end;
Наверняка, все работает, скорее нет прав на создание файла ?
← →
Сергей (2002-12-25 21:39) [11]2 gsu > Дело не в правах. Под 98 я могу писать куда угодно - ето раз. Во вторых FileCreate работает.
2 Anatoly Podgoretsky > эти процедуры я не переопределял, первое что я проверил - нет ли процедур с такими именами в проекте - НЕТ.
← →
gsu (2002-12-25 21:44) [12]Ах, да 98, сорри, но если все так:
Процедура записи в файл
.......
var
F : TextFile;
S : String;
begin
S := "C:\temp\test.txt";
AssignFile(F,S);
// прокатывает
Rewrite(F); // I/O error "File not found"
то мне самому интересно, потому как у мя работает, вот
← →
Anatoly Podgoretsky (2002-12-25 21:44) [13]Это могут быть постороннии компоненты, попробуй обращаться так
System.AssignFile
System.Rewrite
Чудес же не бывает.
← →
Anatoly Podgoretsky (2002-12-25 21:45) [14]Кроме того попробуй создать файл "C:\temp\test.txt" из проводника
← →
gsu (2002-12-25 21:46) [15]>> Anatoly Podgoretsky © (25.12.02 21:44)
>> Чудес же не бывает.
Бывают, но не в математике
← →
Сергей (2002-12-25 21:51) [16]2 gsu> А форму ты откуда создаешь?
Проверь еще так
Форма 1 создается в самом начале.
Application.CreateForm(Form1, TForm1);
Application.Run;
TForm1 = class(TForm)
.......
proc CreateForm2;
end;
TForm2 = class(TForm)
.......
proc Save;
end;
var
Form1 : TForm1;
proc Form1.CreateForm2;
var
F2 : TForm2;
begin
F2 := TForm2.Create(Self);
end;
proc Form2.Save;
var
F : TextFile;
S : String;
begin
S := "C:\temp\test.txt";
AssignFile(F,S);
Rewrite(F);
CloseFile(F);
end;
А так прокатывает?
← →
Сергей (2002-12-25 21:54) [17]Файл тестовый из проводника создается. system.pas на диске в единственном экземпляре, и обращение напрямую system.rewrite не помогает :( Ето все я уже долбал.
← →
Anatoly Podgoretsky (2002-12-25 21:57) [18]Ты проверил
System.AssignFile
System.Rewrite
Если проверил какой результат?
← →
Сергей (2002-12-25 21:59) [19]Результат тот же. Может Дельфа мусором поросла? Я тут недавно компоненты смотрел, модет они напоганили чего? Переинсталить ее...
← →
Anatoly Podgoretsky (2002-12-25 22:01) [20]Да и system.pas не интересует, интеренсует только system.dcu
← →
Сергей (2002-12-25 22:04) [21]system.dcu в единственном экземпляре. А что там - только дельфи знает :) Бэкапов вроде не наблюдается.
← →
Сергей (2002-12-25 22:07) [22]2 Anatoly Podgoretsky> Вся ета эпопея станет украшением fido7.ru.delphi.chainik :)
← →
Song (2002-12-25 23:24) [23]Такое бывает когда предыдуще открытый такого же типа файл не закроешь, а потом снова делаешь ReWrite(), и прчём здесь уже похрену, какая это переменная локальная или глобальная.
← →
PVOzerski (2002-12-26 00:17) [24]IMHO, либо ошибка совсем нелепая (например, нет на самом деле каталога c:\temp), либо
где-то происходит несанкционированное перекрытие строковой или файловой переменной
с "забиванием" его содержимого из-за некоррекной работы с индексами, динамической
памятью и т.п. или даже глюка компилятора. Попробуйте-ка посмотреть содержимое
файловой переменной в момент rewrite - то ли там имя. Внутреннее представление
структуры поищите в исходниках RTL, наверняка можно обойтись приведением
типов (во FreePascal есть TextRec и FileRec, наверняка подобное есть и в Delphi).
← →
icWasya (2002-12-26 10:23) [25]а втом примере что приведён нет CoseFile
← →
gsu (2002-12-26 10:28) [26]Да, да может понаоткрывал, а не закрывал и комп обиделся, грузанись.
А на счет в какой ты форме открываешь, это по фигу, если она создана и работоспособна
← →
Anatoly Podgoretsky (2002-12-26 10:38) [27]Во всяком случае придено недостаточно информации, причина ошибки в неприведенном коде, на это также указывает следующее:
Если я выдираю упомянутую форму из проекта и тестирую ее как отдельное приложение с созданием копии класса при запуске - все нормально.
← →
gsu (2002-12-26 10:50) [28]угу, все хренова оптимизация
← →
Каспер (2002-12-26 11:04) [29]Все таки интересно чем это закончится.
Мне так интитивно кажется что файл уже занят чем то.
Давай выведи на экран IOResult... предварительно отрубив {$I-}...
← →
Song (2002-12-26 11:21) [30]Я уже сказал в чём проблема..
← →
Каспер (2002-12-26 11:26) [31]Так все решилось? И все таки интересно что выдал ИОРезулт
← →
Сергей (2002-12-26 13:08) [32]Ничего не решилось. Все еще интьересней. Assign, Rewrite и CloseFile везде ходят парами. Из некоторых классов форм Assign работает, из некоторых нет - сл-но дело не в забытии закрыть файл.
PVOzerski >> либо
где-то происходит несанкционированное перекрытие строковой или файловой переменной
с "забиванием" его содержимого из-за некоррекной работы с индексами, динамической
памятью и т.п. или даже глюка компилятора.
Скорее всего так, но сроки жмут (2 дня осталось). Посему все кончилось прозаически - TStringList.SaveToFile("path");
Спасибо всем!
← →
Каспер (2002-12-26 14:04) [33]:) Сорри Но точно там стоит AssignFile а не Assign?
← →
Жорик (2002-12-26 14:19) [34]Попробуй такую связку:
var f: system.text;
//
assignfile(f,"c:\temp.text");
rewrite(f);
...
closefile(f);
Должно работать, по крайней мере у меня работает...
← →
gsu (2002-12-26 16:03) [35]>> TStringList.SaveToFile("path")
героическое решение ...
← →
Alexander1966 (2002-12-27 15:28) [36]А диск точно c: СИ, может c: ЭС. Бывает.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.009 c