Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.05.2013, 17:38
Tonyy Tonyy вне форума
Новичок
 
Регистрация: 05.04.2010
Сообщения: 85
Репутация: 10
По умолчанию ох уж этот поиск файлов

у меня есть 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
вот такой парадокс. почему?
Ответить с цитированием
  #2  
Старый 23.05.2013, 19:32
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А вам не кажется что в Strings неплохо бы добавить не только имена файлов, но и пути к ним?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 23.05.2013, 20:07
Tonyy Tonyy вне форума
Новичок
 
Регистрация: 05.04.2010
Сообщения: 85
Репутация: 10
По умолчанию

ну да. тогда вроде бы нормально. но когда имена без путей - выглядит красивей. если бы был один листбокс все было бы нормально. кто-нибудь может объяснить почему?
и можно ли как нибудь сделать так чтобы в листбоксах были бы только имена а полные пути для разных листбоксах были бы правильными?
Ответить с цитированием
  #4  
Старый 24.05.2013, 00:49
vladislav147 vladislav147 вне форума
Прохожий
 
Регистрация: 12.08.2012
Сообщения: 28
Репутация: 9
По умолчанию

Ну так к тексту обработки добавьте X:\путь.
Result: 'X:\путь' + Listbox1.Items[i]; ????
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter