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

Ваш аккаунт

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

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

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

Перечисление файлов и папок

313
17 декабря 2006 года
insane88
440 / / 13.12.2006
Столкнулся с такой проблемой: надобно создать список папок, вложеннных папок, файло, etc. Подскажите, как это сделать?
354
17 декабря 2006 года
ШпиЁн
468 / / 19.02.2006
FindFirstFile, FindNextFile, и рекурсивный перебор :о)
313
17 декабря 2006 года
insane88
440 / / 13.12.2006
Расскажи поподробнее о рекурсивном переборе плз...:rolleyes:
257
17 декабря 2006 года
kosfiz
1.6K / / 18.09.2005
я дельфист, поэтому код на Delphi
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;

procedure findfiles(dir:string);
var fd:WIN32_FIND_DATA;
    hFindFile:DWORD;
begin
hFindFile:=FindFirstFile(pchar(dir+'*.*'),fd);
if hFindFile<>INVALID_HANDLE_VALUE then
 repeat
  if fd.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
   begin
   if (string(fd.cFileName)<>'.') and (string(fd.cFileName)<>'..') then
    findfiles(dir+fd.cFileName+'\')
   end
    else
    writeln(dir+fd.cFileName);
 until FindNextFile(hFindFile,fd)=false;
FindClose(hFindFile);
end;


begin
findfiles('c:\windows\');
readln;
end.

программа выведет в консоль все файлы лежащие в c:\windows\. впринципе саму процедуру findfiles будет не так уж и сложно переделать на нужный тебе язык.
354
18 декабря 2006 года
ШпиЁн
468 / / 19.02.2006
объясню по-простому. рекурсия - это когда функция вызывает саму себя, но уже с другими параметрами :о) обычно перед таким вызовом стоит проверка на условие выхода из функции.

Код:
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

void Find(string path)
{
    WIN32_FIND_DATA FileData;
    HANDLE hSearch;
    string _path, s_path;
   
    _path = path+ "\\" + "*";
    hSearch = FindFirstFile(_path.c_str(), &FileData);
   
    while(FindNextFile(hSearch, &FileData))
    {
        if(strcmp(FileData.cFileName, ".") == 0) continue;
        if(strcmp(FileData.cFileName, "..") == 0) continue;
   
        s_path = path + "\\" + FileData.cFileName;
       
        if(!(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            cout << s_path.c_str() << endl;
        else
        {
            cout << "<DIR> " << s_path.c_str() << endl;
            Find(s_path); // рекурсия, передаем другие параметры
        }
       
        s_path.clear();
    }
   
    FindClose(hSearch);
}

int main()
{
    Find("C:");
    getchar();
    return 0;
}
4.1K
18 декабря 2006 года
GRIENDERS
117 / / 06.06.2006
Цитата: kosfiz

 
Код:
.....
  if fd.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
   begin
   if (string(fd.cFileName)<>'.') and (string(fd.cFileName)<>'..') then
    findfiles(dir+fd.cFileName+'\')
   end
......



Надо вот так:

 
Код:
.....
 if (((fd.dwFileAttributes) and(FILE_ATTRIBUTE_DIRECTORY))=FILE_ATTRIBUTE_DIRECTORY ) then
   begin
   if (string(fd.cFileName)='.') or (string(fd.cFileName)='..') then continue;
    findfiles(dir+fd.cFileName+'\')
   end
......
313
18 декабря 2006 года
insane88
440 / / 13.12.2006
Да, с файлами все понятно. Но как перечислить и вложеннные папки?
4.1K
18 декабря 2006 года
GRIENDERS
117 / / 06.06.2006
Цитата: insane88
Да, с файлами все понятно. Но как перечислить и вложеннные папки?


А я тебе че написал?

313
18 декабря 2006 года
insane88
440 / / 13.12.2006
Извини, я вбшник, сразу в коде не разобрался...:rolleyes:
313
19 декабря 2006 года
insane88
440 / / 13.12.2006
Народ, а почему в конце найденных имен тучи квадратов?
313
19 декабря 2006 года
insane88
440 / / 13.12.2006
Немного модифицированный код предыдущего аттача
354
19 декабря 2006 года
ШпиЁн
468 / / 19.02.2006
какие квадраты, блин? :о) у меня тот же самый код на C++ работает на ура :о)
313
20 декабря 2006 года
insane88
440 / / 13.12.2006
То Си... в конце имен файлов нуллчары. Удалить-то я их удалил, но поиск все равно не желает работать.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог