Изменения директории и вывод дерева директорий
А также автоматически обновляет это дерево при создании, удалении файла, директории, а также при изменении размера файла.
Возможно ли это сделать в .NET?
В каком компоненте осуществляется вывод дерева?
Цитата: michael_is_98
Ребята, нужна следующая программка: пользователь задает путь (например "e:\mailboxes"), программа выводит дерево каталогов и подкаталогов, начинающихся с заданного пути.
А также автоматически обновляет это дерево при создании, удалении файла, директории, а также при изменении размера файла.
Возможно ли это сделать в .NET?
В каком компоненте осуществляется вывод дерева?
А также автоматически обновляет это дерево при создании, удалении файла, директории, а также при изменении размера файла.
Возможно ли это сделать в .NET?
В каком компоненте осуществляется вывод дерева?
А при чем здесь .NET? Для .NET есть соответвующий раздел форума. Что же касается вывода дерева директорий, то я бы юзал API-шную функцию SHBrowseForFolder
Здесь нужна структура, содержащая информацию о дереве каталогов начиная с заданного каталога.
Диалог дерева директорий здесь не причем - если точнее нужет тот код, который это дерево строит начиная с заданного пути
А чем дерево каталогов отличается от любого другого дерева? Создавай дерево, корнем дерева будет путь к начальной папке, дальше сканируй каждую папку на предмет вложенных (не знаю как на .NET, но на WinApi можно через FindFirstFile/FindNextFile), при нахождении таковых добавляй новые вершины к дереву с названиями этих папок. Лучше использовать рекурсию.
1) какой структурой пользоваться (желательно из библиотеки STL)
2) как обойти рекурсию (потому что при глубоких вхождениях рано или поздно произойдет переполение стека)
В WinRAR это довольно шустро работает при определении списка файлов для архивации ...
2) Не будет у тебя переполнения стека, если все делать правильно.
Кстати совсем забыл написать про автообновление списка в предыдущем посте, ReadDirectoryChangesW тебе в помощь, в MSDN'е все подробно описано.
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <iostream.h>
#include <stdio.h>
#include <io.h>
#include <time.h>
#include <direct.h>
#include <conio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
char path[256]="C:";
static int entry;
static int foldercount;
void Explore(void);
void CreateDesktopIniFile(void);
int main(int argc, char* argv[])
{
Explore();
return 0;
}
void Explore(void)
{
entry++;
char temp[256];
_finddata_t fileinfo;
strcat(path,"\\*");
long hnd;
if ((hnd=_findfirst(path, &fileinfo))!=-1) {
do {
if(fileinfo.name[0]=='.') continue;
if (fileinfo.attrib & _A_SUBDIR) {
strcpy(path+strlen(path)-1,fileinfo.name);
chdir(path);
cout<<path<<endl;
foldercount++;
Explore();
continue;
}
strcpy(temp,path);
temp[strlen(path)-2]='\0';
strcat(temp,"\\");
strcat(temp,fileinfo.name);
cout << temp << "\\"<< fileinfo.name<<endl;;
strcpy(temp,path);
temp[strlen(path)-2]='\0';
cout << temp << "\\"<< fileinfo.name<<endl;;
} while (_findnext(hnd,&fileinfo)==0);
}
entry--;
if (entry==0) {
int ii;
cin >> ii;
return;
}
path[strlen(path)-2]='\0';
int n=strlen(path)-1;
while (path[n]!='\\') n--;
path[n]='\0';
chdir(path);
path[n++]='\\';path[n++]='*';path[n]='\0';
return;
}