Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Файловый менеджер / 9 сообщений из 9, страница 1 из 1
21.11.2005, 20:47
    #33391050
Василина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
Помогите пожалуйста советом....
как в BC++ можно составить список файлов и папок...чтобы автоматически определялось, как в файловых менеджерах...
Помогите каким нибудь советом, т.к. не знаю даже с чего начать...:(
...
Рейтинг: 0 / 0
21.11.2005, 22:07
    #33391120
AndreiNz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
Пример из Делфи:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
 procedure  TForm1.Button1Click(Sender: TObject);

 var 
  sr: TSearchRec;
  FileAttrs: Integer;
 begin 
  StringGrid1.RowCount :=  1 ;
   if  CheckBox1.Checked  then 
    FileAttrs := faReadOnly
   else 
    FileAttrs :=  0 ;
   if  CheckBox2.Checked  then 
    FileAttrs := FileAttrs + faHidden;
   if  CheckBox3.Checked  then 
    FileAttrs := FileAttrs + faSysFile;
   if  CheckBox4.Checked  then 
    FileAttrs := FileAttrs + faVolumeID;
   if  CheckBox5.Checked  then 

    FileAttrs := FileAttrs + faDirectory;
   if  CheckBox6.Checked  then 
    FileAttrs := FileAttrs + faArchive;
   if  CheckBox7.Checked  then 

    FileAttrs := FileAttrs + faAnyFile;

   with  StringGrid1  do 
   begin 
    RowCount :=  0 ;

     if  FindFirst(Edit1.Text, FileAttrs, sr) =  0   then 

     begin 
       repeat 
         if  (sr.Attr  and  FileAttrs) = sr.Attr  then 
         begin 
        RowCount := RowCount +  1 ;
        Cells[ 1 ,RowCount- 1 ] := sr.Name;
        Cells[ 2 ,RowCount- 1 ] := IntToStr(sr.Size);
         end ;
       until  FindNext(sr) <>  0 ;
      FindClose(sr);
     end ;
   end ;
 end ;

FindFirst; FindNext;FindClose.

Билдер должен использовать тоже самое. В крайнем случае есть практически такой же Win32 API
...
Рейтинг: 0 / 0
21.11.2005, 22:33
    #33391135
Василина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
пасибо. попробую сделать.....
...
Рейтинг: 0 / 0
22.11.2005, 10:57
    #33391709
Lacrim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
авторчтобы автоматически определялось, как в файловых менеджерах...


А что определяться то должно?
...
Рейтинг: 0 / 0
24.11.2005, 19:23
    #33398522
Василина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
Определяться должны файлы, папки....
...
Рейтинг: 0 / 0
03.12.2005, 03:29
    #33415110
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
void ListFiles(AnsiString path, TStrings* List)
{
// Эта процедура выводит список папок

TSearchRec sr;
if (FindFirst(path+"*.*", faAnyFile, sr) == 0)
{
do
{
if (sr.Attr & faDirectory)
{
if (sr.Name!=".")
if (sr.Name!="..")
{
//здесь пможно вытянуть папку sr.Name - имя
//path+sr.Name полное имя папки
ListFiles(path+sr.Name+"\\",List);// Рекурсивный вызов
}
}
else
{
AnsiString Ext=ExtractFileExt(sr.Name).UpperCase();
if (Ext == ".CFG") //формат файла
List->Add(sr.Name);


}
}
while (FindNext(sr) == 0);
...
Рейтинг: 0 / 0
03.12.2005, 03:41
    #33415111
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
Это в билдере в досе почти так же...
если нужно в турбо с++ или борланд 3.11, то смотри в хелпе хедер dir.h
функции findfirst, _dos_findfirst
findnext, _dos_findnext
...
Рейтинг: 0 / 0
07.12.2005, 23:31
    #33423703
Василина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
Спасибо! На мысли натолкнул и за библиотеку большое спасибо!
...
Рейтинг: 0 / 0
08.12.2005, 00:09
    #33423730
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый менеджер
Приблизительно так можно просмотреть все файлы и папки в заданной папке при помощи WinAPI.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
void GetFiles(wchar_t* pathName)
{
	WIN32_FIND_DATA fd;
	HANDLE h;
	wchar_t fileName[MAX_PATH];
	wchar_t fileMask[MAX_PATH];

	if ((h = ::FindFirstFile(m_DataBasePath, &fd)) != NVALID_HANDLE_VALUE)
	{
		FindClose(h);
		size_t lenPath = wcslen(pathName);
		wcscpy(fileMask, pathName);
		fileMask[lenPath] = L'\\'; fileMask[lenPath +  1 ] = L'*'; 
		fileMask[lenPath +  2 ] = L'.'; fileMask[lenPath +  3 ] = L'*'; fileMask[lenPath +  4 ] =  0 ; 
		wcscpy(fileName, pathName);
		fileName[lenPath] = L'\\'; fileName[++lenPath] =  0 ; 

                 h = ::FindFirstFile(fileMask, &fd);
	        while (h != INVALID_HANDLE_VALUE)
		{
                         wcscpy(&fileName[lenPath], fd.cFileName);
//............ Что-то делаем с полученным fileName
	         	if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && fd.cFileName[ 0 ] != L'.')
			     GetFiles(fileName);
		        if (!::FindNextFile(h, &fd))
			     break;
		}
		DWORD dwError = GetLastError();
		if (dwError == ERROR_NO_MORE_FILES) 
			FindClose(h);
	}
}

Не тестировал, но должно работать (если синтаксических ошибок нет )
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Файловый менеджер / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]