powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Файловый менеджер
9 сообщений из 9, страница 1 из 1
Файловый менеджер
    #33391050
Василина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста советом....
как в BC++ можно составить список файлов и папок...чтобы автоматически определялось, как в файловых менеджерах...
Помогите каким нибудь советом, т.к. не знаю даже с чего начать...:(
...
Рейтинг: 0 / 0
Файловый менеджер
    #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
Файловый менеджер
    #33391135
Василина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пасибо. попробую сделать.....
...
Рейтинг: 0 / 0
Файловый менеджер
    #33391709
Lacrim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторчтобы автоматически определялось, как в файловых менеджерах...


А что определяться то должно?
...
Рейтинг: 0 / 0
Файловый менеджер
    #33398522
Василина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Определяться должны файлы, папки....
...
Рейтинг: 0 / 0
Файловый менеджер
    #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
Файловый менеджер
    #33415111
Гадёныш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это в билдере в досе почти так же...
если нужно в турбо с++ или борланд 3.11, то смотри в хелпе хедер dir.h
функции findfirst, _dos_findfirst
findnext, _dos_findnext
...
Рейтинг: 0 / 0
Файловый менеджер
    #33423703
Василина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! На мысли натолкнул и за библиотеку большое спасибо!
...
Рейтинг: 0 / 0
Файловый менеджер
    #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
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Файловый менеджер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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