Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
14-25024
France
2002-12-17 12:49
2003.01.09
Как сделать фото на стекле?


14-25035
Вадим
2002-12-19 00:27
2003.01.09
а правда...


14-25038
Гл.Приколист
2002-12-19 14:10
2003.01.09
:)) И нам тоже нужен приколист


14-25032
iNew
2002-12-19 12:29
2003.01.09
Проблема: Есть два компа 1комп: Win2000 Adv Server в нём стоят


1-24896
tiam
2002-12-24 14:49
2003.01.09
Создание двух потоков





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский