Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.024 c
1-1098254696
Zirf
2004-10-20 10:44
2004.10.31
Как QuickReport е принудительно создать несколько страниц


6-1093319278
SlyFox
2004-08-24 07:47
2004.10.31
NMPOP3: Cannot create file


14-1097137982
КаПиБаРа
2004-10-07 12:33
2004.10.31
Пишу ТЗ.


6-1093246459
SPy
2004-08-23 11:34
2004.10.31
Права доступа к файлам


1-1098099769
ORMADA
2004-10-18 15:42
2004.10.31
Ярлыки