Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужен код перебора каталогов и файлов

270
10 сентября 2006 года
Drew
265 / / 20.07.2000
Нужен код для перебора каталогов с подкаталогами и файлов в них. У кого есть - киньте пожалуйста на [email]po_saa@mail.ru[/email].... ну просто лениво ... :)
1.9K
10 сентября 2006 года
SABROG
242 / / 26.01.2006
Код:
//Текст заголовочного файла "_scanfolder.h"
#ifndef scanfolderH
#define scanfolderH
#include <dir.h>
//---------------------------------------------------------------------------
class CScanFolder : public ffblk
{
private:   // User declarations
        int Find;
public:
        __fastcall CScanFolder(const char *FileName="*.*",int Attr = 0){
          Find=findfirst(FileName, this, Attr);
        }
        operator const char*(){
          return Find ? 0: ff_name;
        }
        int operator++(int){
          return(Find=findnext(this));
        }
        int operator++(){
          return operator++(0);
        }
        __fastcall ~CScanFolder(void){
          findclose(this);
          //ShowMessage(String(ff_name));
        };
};
#endif

Код:
#include "_scanfolder.h"

//Например, вы хотите опросить текущий
//каталог и считать имена всех файлов с расширением
//*.cpp в ListBox1.

void __fastcall TfrmMain::Button1Click(TObject *)
{
AnsiString Mask = "*.cpp";

for(CScanFolder SF((char*)Mask.c_str(), 0);SF;SF++)
  ListBox1->Items->Add(AnsiString(SF));
}

Код:
//главную форму приложения назовем frmMain
//положим на нее компонент TTreeView
//положим на нее компонент TImageList, в который засунем иконки
//папок - открытой и закрытой.

//объявляем метод BuildTree(TTreeView *Tree, TTreeNode * Node, const AnsiString Path)
//первый парметр это то дерево в котором мы хотим отобразить структуру папок
//второй - узел дерева к которому мы будем пристраивить свой куст
//третий - абсолютный путь к папки, структуру котрой мы хотим отобразить.

int __fastcall TfrmMain::BuildTree(TTreeView *Tree, TTreeNode * Node, const AnsiString Path)
{
AnsiString Mask = Path + slash +"*.*";
AnsiString Ext;
Tree->Items->BeginUpdate();

TTreeNode *sNode;
for(CScanFolder SF((char*)Mask.c_str(), FA_DIREC);SF;SF++){
  if(AnsiString(SF)!="."&&AnsiString(SF)!=".."){

    if(IsFolder(Path + AnsiString(SF))){
      sNode = Tree->Items->AddChild(Node, SnipExt(AnsiString(SF)));
      sNode->ImageIndex = 0;
      sNode->SelectedIndex = 1;

    }

    if(IsFolder(Path + AnsiString(SF)))
        BuildTree(Tree, sNode, Path + AnsiString(SF)+"\\");
  }
}
Tree->Items->EndUpdate();
return 1;
}

 
Код:
void __fastcall TfrmMain::Button1Click(TObject *)
{
BuildTree(TreeView1,  NULL, "C:\\"); //этот вызов нарисует всю структуру диска С:
}


Оригинальный источник: http://borland.xportal.ru/forum/viewtopic.php?t=1498&highlight=cscanfolder
11K
10 сентября 2006 года
zbestr
40 / / 07.04.2006
А IsFolder и SnipExt что за функции?
Мона на них глянуть
1.9K
10 сентября 2006 года
SABROG
242 / / 26.01.2006
[QUOTE=zbestr]А IsFolder и SnipExt что за функции?
Мона на них глянуть[/QUOTE]
Самописные. Думаю не будет стоить труда написать свои, например так:

 
Код:
bool IsFolder(AnsiString fName)
{
if (GetFileAttributes(fName.c_str()) == FILE_ATTRIBUTE_DIRECTORY) return true;
return false;
}


 
Код:
AnsiString SnipExt(AnsiString fName)
{
return fName.SubString(0,fName.Length()-ExtractFileExt(fName).Length());
}
11K
10 сентября 2006 года
zbestr
40 / / 07.04.2006
ясно спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог