Форум: "Потрепаться";
Текущий архив: 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