у меня есть 2 ЛистБокса. в один загружаются имена файлов с расширением segd? в другой с расширением sgy. затем в процессе выполнения программы необходиом обращение к файлам из первого листбокса и из второго. но тут происходит ошибка. и компилятор пишет, что файла не существует. файла не существует потому что путь к файлу берется из листбокса в который грузили последним а имя файла из другого листбокса. вопрос почему так получается. можно ли как-то исправить чтобы имена всех файлов были правильными?
Код:
procedure ListsgyFilesInDirectory(Dir: string; Strings: TStrings);
var // dir - например C:\sgy\
rSearchRec: TSearchRec;
begin
if ((Dir = '') or (not Assigned(Strings))) then
Exit;
Dir := IncludeTrailingPathDelimiter(Dir);
if FindFirst(Dir + '*.sgy', faAnyFile, rSearchRec) = 0 then
try
repeat
if ((rSearchRec.Name <> '.') and (rSearchRec.Name <> '..')) then
if (rSearchRec.Attr and faDirectory) <> 0 then
ListSgyFilesInDirectory(Dir + rSearchRec.Name, Strings)
else
Strings.Add(rSearchRec.Name);
until FindNext(rSearchRec) <> 0;
finally
FindClose(rSearchRec);
end;
end;
procedure ListSegdFilesInDirectory(Dir1: string; Strings: TStrings);
var // dir - например C:\segd\
rSearchRec: TSearchRec;
begin
if ((Dir1 = '') or (not Assigned(Strings))) then
Exit;
Dir1 := IncludeTrailingPathDelimiter(Dir1);
if FindFirst(Dir1 + '*.segd', faAnyFile, rSearchRec) = 0 then
try
repeat
if ((rSearchRec.Name <> '.') and (rSearchRec.Name <> '..')) then
if (rSearchRec.Attr and faDirectory) <> 0 then
ListSegdFilesInDirectory(Dir1 + rSearchRec.Name, Strings)
else
Strings.Add(rSearchRec.Name);
until FindNext(rSearchRec) <> 0;
finally
FindClose(rSearchRec);
end;
end;
procedure TForm1.vssClick(Sender: TObject);
begin
if open2.Execute then begin
ListsgyFilesInDirectory(ExtractFilePath(open2.FileName),lst2.Items) ;
end;
end;
procedure TForm1.segdClick(Sender: TObject);
begin
if open1.Execute then begin
ListSegdFilesInDirectory(ExtractFilePath(open1.FileName),lst1.Items) ;
end;
end;
результат: если мы последним в листбокс загружали segd, то при обращении к sgy-файлам имя будет - c:\segd\name.sgy
а если последним загружали sgy, то при обращении в segd имя будет - c:\sgy\name.segd
вот такой парадокс. почему?