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

Вниз

Странная проблема с открытием файла   Найти похожие ветки 

 
Russel ©   (2004-10-11 09:42) [0]

Добрый день всем!
 Делаю программку, работающую с тестовыми файлами.
 В процессе работы она ищет файлы в указанной папке и потом с ними работает - открывает каждый файл и чего-то с ним делает.
 Поиск осуществляется при помощи FindFirst, FindNext.
 Так вот, когда доходит до кода

   AssignFile(ActiveFile, FName);
   Reset(ActiveFile);
   
 На второй строке вылетает с ошибкой "Invalid file name".
 Этот файл существует 100%. Если б его не было, оно  бы вылетало на первой строке, как я понимаю? Но это еще ладно. Запускаю скомпилированный ехешник из Total Commander"a. Та же фигня. Копирую ЭТОТ ЖЕ ехешник в другое место. Все работает. Копирую назад - не  работает. Куда копать, непонятно. Выручайте! :)
Заранее спасибо!


 
begin...end ©   (2004-10-11 09:44) [1]


> Russel ©   (11.10.04 09:42)


> Если б его не было, оно  бы вылетало на первой строке, как
> я понимаю?

Неправильно понимаешь.

А путь-то - полный?


 
Johnmen ©   (2004-10-11 09:47) [2]

В FName у тебя имя файла с относительным путём.
>оно  бы вылетало на первой строке, как я понимаю?
Нет, на Reset"е.


 
Russel ©   (2004-10-11 09:51) [3]

Для прояснения ситуации:
1. Путь полный.
2. Такой файл существует 100%. Программа только что его нашла и  внесла в список. никуда он деться не мог.


 
Johnmen ©   (2004-10-11 09:54) [4]

>Программа только что его нашла

Так в чем проблема ?


 
ЮЮ ©   (2004-10-11 10:24) [5]

>Этот файл существует 100%  Если б его не было...
А в отладчике посмотреть имя файла или при сбое вывести имя файла не судьба? Findххх находит файлы с именами "." и "..", между прочим


 
П7   (2004-10-11 10:32) [6]

ага, и нужно их отсекать. Вот так:

var
 SearchRec : TSearchRec;
 Result : integer;
 tf : TextFile;
 buf : string;
begin
 treList.Items.Clear();
 ListLink.Clear();

 Result := FindFirst( PathDir+"\texts\*.txt", faAnyFile, SearchRec);
 while Result = 0 do
 begin
   if ( SearchRec.Name <> "." ) and
      ( SearchRec.Name <> ".." ) then
     if SearchRec.Attr and faDirectory > 0 then
     else
     begin
       Text1.Text := Text1.Text+#10#13+"File: "+SearchRec.Name;
       AssignFile( tf, PathDir+"\texts\"+SearchRec.Name );
       Reset( tf );
       while not EOF( tf ) do
       begin
         ReadLn( tf, buf );
         Text1.Text := Text1.Text+#10#13+buf;
       end;
       CloseFile( tf );
       Text1.Text := Text1.Text+#10#13;
     end;
   end;
   Result := FindNext( SearchRec );
 end;
 FindClose( SearchRec );
end;


Всё работает прекрасно! (:


 
panov ©   (2004-10-11 10:40) [7]

Решение странных проблем с ошибками обычно находится в коде программы...


 
Russel ©   (2004-10-11 11:11) [8]

Ребят, ну не держите меня за идиота, пожалуйста. Естесственно, всякие "." и ".." и директории отсекаются. Спотыкается именно на "c:\aaa\123.txt". Файл существует. Самое, интересное, что ехешник, сапущенный из другой папки, работает.


 
begin...end ©   (2004-10-11 11:20) [9]

Т.е. "c:\aaa\123.txt" - это значение FName, которое ты видишь в отладчике? Так?


 
ЮЮ ©   (2004-10-11 11:20) [10]

>Самое, интересное, что ехешник, сапущенный из другой папки, работает.

он тоже ищет в папке c:\aaa\ ?

З.Ы. Кстати, под ХП был такой случай: программа не работала (тоже что-то с открытие файлов). Перенесли всё в другую папку - заработало.


 
Erik1 ©   (2004-10-11 11:25) [11]

Может с правами чего не то?


 
Russel ©   (2004-10-11 11:35) [12]

2 ЮЮ: Да, ищет в той же папке. Винда 2000.
Права у меня администратора.


 
begin...end ©   (2004-10-11 11:38) [13]


> Russel

А вот ещё интересно: что FileExists возвращает?


 
Russel ©   (2004-10-11 11:43) [14]

2 begin...end ©   (11.10.04 11:20) [9]
>Т.е. "c:\aaa\123.txt" - это значение FName, которое ты видишь в >отладчике? Так?
Да, именно так.


 
Russel ©   (2004-10-11 11:46) [15]

2 begin...end ©   (11.10.04 11:38) [13]
>А вот ещё интересно: что FileExists возвращает?
Ставил
if not FileExists(FName) then
   Application.MessageBox(PChar("Error"), "Error", MB_OK + MB_ICONSTOP);
Ничего не выскакивает.


 
begin...end ©   (2004-10-11 11:54) [16]

Всё интересней и интересней...

1.

begin
 FileMode := 0;
 AssignFile(ActiveFile, FName);
 Reset(ActiveFile);
end.


2.
var
 FS: TFileStream;
begin
 FS := TFileStream.Create(FName, fmOpenRead)
 if Assigned(FS) then FS.Free;
end.


Попробуй эти два варианта, будет ругаться?


 
Russel ©   (2004-10-11 11:57) [17]

2 begin...end ©   (11.10.04 11:54) [16]
Первый вариант ничего не изменил.
второй вариант прошел.


 
Плохиш ©   (2004-10-11 12:06) [18]

Вот и ладненько, вот и разобрались :-) а файл-то в другой программе уже открыт


 
Gero ©   (2004-10-11 12:08) [19]


> а файл-то в другой программе уже открыт

Ага. CloseFile кое-кто сделать забыл.


 
Плохиш ©   (2004-10-11 12:08) [20]

В хелпе про это очень даже подробненько всё описано.

PS. или атрибут у файла "только для чтения".


 
Russel ©   (2004-10-11 12:09) [21]

2Плохиш и Gero
>Вот и ладненько, вот и разобрались :-) а файл-то в другой >программе уже открыт
Нифига :)
Нигде он не открыт.


 
Russel ©   (2004-10-11 12:12) [22]

2Плохиш.
Атрибуты... Вспоминал я про них. Снял все. Не помогло.


 
Gero ©   (2004-10-11 12:12) [23]


> Russel ©   (11.10.04 12:09)

Блокнот его может открыть и сохранить изменения?


 
begin...end ©   (2004-10-11 12:13) [24]

Я теряюсь в догадках.


 
Russel ©   (2004-10-11 12:14) [25]

2 Gero.
Блокнот может с ним работать.
2 begin...end
Я тоже :)


 
Gero ©   (2004-10-11 12:15) [26]


> Блокнот может с ним работать.

Он может сохранить изменения в нем?


 
Russel ©   (2004-10-11 12:16) [27]

2 Gero.
Может.


 
Gero ©   (2004-10-11 12:18) [28]


> Russel ©   (11.10.04 12:16)

Ты не принимал в последнее время алкоголь в больших дозах и наркотические вещества? ;)


 
begin...end ©   (2004-10-11 12:19) [29]

А если попробовать вначале перейти в эту папку ChDir"ом - перейдёт?
А потом открыть - что будет?


 
Gero ©   (2004-10-11 12:19) [30]

Да, кстати.

> Нигде он не открыт.

А почем ты знаешь?


 
Плохиш ©   (2004-10-11 12:24) [31]

Короче дело - ясное. Ошибка в 17й строке.


 
КаПиБаРа ©   (2004-10-11 12:30) [32]

Перегрузи комп :)


 
Russel ©   (2004-10-11 12:30) [33]

2Gero ©   (11.10.04 12:18) [28]
>Ты не принимал в последнее время алкоголь в больших дозах и >наркотические вещества? ;)
:D
Давным-давно не доводилось алкоголь принимать... :)
>> Нигде он не открыт.
>А почем ты знаешь?
Условно: только что перезагрузился. Запускаю Дельфу. Компилю. запускаю ехешник. Получаю ошибку. К тому файлу ничего не лезет.

2begin...end ©   (11.10.04 12:19) [29]
>А если попробовать вначале перейти в эту папку ChDir"ом - >перейдёт?
>А потом открыть - что будет?
Попробую сейчас...

2Плохиш.
в 17-й строке у меня ну совсем не то :)))


 
Russel ©   (2004-10-11 12:32) [34]

2КаПиБаРа
Перегружал. Выключал (в субботу это все началось).
Полтергейст какой-то...


 
Russel ©   (2004-10-11 12:35) [35]

2begin...end
С ChDir"ом тоже ошибка...


 
КаПиБаРа ©   (2004-10-11 12:36) [36]

А так работает?
var
FS: TFileStream;
begin
FS := TFileStream.Create(FName, fmOpenReadWrite)
if Assigned(FS) then FS.Free;
end.


 
begin...end ©   (2004-10-11 12:46) [37]


> [35] Russel ©   (11.10.04 12:35)


> С ChDir"ом тоже ошибка...

Ошибка в каком смысле? Прямо на ChDir"е вылетает?


 
Russel ©   (2004-10-11 13:31) [38]

Нет, при Reset"e..
Да ладно... Плюнул на поиск причины. Поставил {$I-} в начале процедуры и {$I+} в конце и все заработало...
Всем спасибо за участие :)))


 
begin...end ©   (2004-10-11 13:32) [39]

Ну теперь можешь расслабиться и принять алкоголь ;-)



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

Форум: "Потрепаться";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.036 c
3-1096624461
stud
2004-10-01 13:54
2004.10.31
использование параметра в хранимой процедуре


1-1097964955
saNat
2004-10-17 02:15
2004.10.31
Издевательство над StringGrid ом


1-1098176351
starik30
2004-10-19 12:59
2004.10.31
Обмен между потоками


3-1096464925
Хома
2004-09-29 17:35
2004.10.31
Connect to Informix


3-1096965656
Mitrofan
2004-10-05 12:40
2004.10.31
Утилита которая показывает загрузку сервера Firebird





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