Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывести список файлов, каталогов, подкаталов в Visual C++ / 11 сообщений из 11, страница 1 из 1
13.04.2011, 19:57
    #37215157
Вывести список файлов, каталогов, подкаталов в Visual C++
Нашел код, который должен мне помочь:

Код: 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.
void azTorrent_ScanDir(string strPath, string& strFiles)
{
    WIN32_FIND_DATA fd; HANDLE handle;
    string strSpec = strPath + "\\*.*";
    handle = FindFirstFile(strSpec.c_str(), &fd);
    if(handle == INVALID_HANDLE_VALUE)
        return;
    do {
        strSpec = fd.cFileName;
        if(strSpec != "." && strSpec != "..")
        {
            if( !(fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) )
            {
                strSpec = strPath + "\\" + strSpec;
                if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                    azTorrent_ScanDir(strSpec, strFiles);
                }
                else {
                    if(fd.nFileSizeLow !=  0  || fd.nFileSizeHigh !=  0 ) {
                        strFiles+= strSpec + "\n";
                    }
                }
            }
        }
    } while(FindNextFile(handle, &fd));
    FindClose(handle);
}

Помогите разобраться в следующем:
что обозначает это условие

Код: plaintext
1.
if(strSpec != "." && strSpec != "..")

что одна и две точки обозначают?
видел что cFileName может возвращать '\0', тоже интересно о чем это говорит
...
Рейтинг: 0 / 0
13.04.2011, 20:15
    #37215176
Вывести список файлов, каталогов, подкаталов в Visual C++
не могу найти подробное описание возвращаемых значений этой функцией
...
Рейтинг: 0 / 0
13.04.2011, 21:56
    #37215290
Rififi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести список файлов, каталогов, подкаталов в Visual C++
Vladimir Mihailovich,

"." означает текущую директорию, ".." - парента для текущей директории

эти две записи - служебные и всегда (исторически) присутствуют в элементах файловой структуры.

PS. это код для людей, которые предпочитают заниматься сексом в гамаке и на лыжах.

возьми Boost.Filesysten или STLsoft и не мучайся.
...
Рейтинг: 0 / 0
13.04.2011, 21:59
    #37215292
Rififi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести список файлов, каталогов, подкаталов в Visual C++
Vladimir Mihailovich,

с использованием Boost.Filesystem примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include <boost/filesystem.hpp>

namespace fs = boost::filesystem;

fs::path dir = "C:\\";

const fs::directory_iterator end;

for (fs::directory_iterator it = dir; it != end; ++it)
    std::cout << it->path();
...
Рейтинг: 0 / 0
14.04.2011, 09:01
    #37215656
Вывести список файлов, каталогов, подкаталов в Visual C++
Просто моей задачей также является получить размер всех подкаталогов, файлов в рамках текущей директории, не знаю, сможет ли мне boost помочь в определении занимаемого обьема каталогов и файлов?
...
Рейтинг: 0 / 0
14.04.2011, 12:40
    #37216176
Rififi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести список файлов, каталогов, подкаталов в Visual C++
Vladimir Mihailovichсможет ли мне boost помочь в определении занимаемого обьема каталогов и файлов?

для файлов - file_size

для каталогов - либо собственный рекурсивный цикл, либо специальный итератор
...
Рейтинг: 0 / 0
14.04.2011, 16:44
    #37216825
Сыроежка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести список файлов, каталогов, подкаталов в Visual C++
Vladimir MihailovichНашел код, который должен мне помочь:

Код: 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.
void azTorrent_ScanDir(string strPath, string& strFiles)
{
    WIN32_FIND_DATA fd; HANDLE handle;
    string strSpec = strPath + "\\*.*";
    handle = FindFirstFile(strSpec.c_str(), &fd);
    if(handle == INVALID_HANDLE_VALUE)
        return;
    do {
        strSpec = fd.cFileName;
        if(strSpec != "." && strSpec != "..")
        {
            if( !(fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) )
            {
                strSpec = strPath + "\\" + strSpec;
                if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                    azTorrent_ScanDir(strSpec, strFiles);
                }
                else {
                    if(fd.nFileSizeLow !=  0  || fd.nFileSizeHigh !=  0 ) {
                        strFiles+= strSpec + "\n";
                    }
                }
            }
        }
    } while(FindNextFile(handle, &fd));
    FindClose(handle);
}

Помогите разобраться в следующем:
что обозначает это условие

Код: plaintext
1.
if(strSpec != "." && strSpec != "..")

что одна и две точки обозначают?
видел что cFileName может возвращать '\0', тоже интересно о чем это говорит

Точка означает текущий каталог. Две точки - родительский каталог. Так что само условие означает, что пропустить в данном каталоге записи, которые относятся к текущему каталогу и родительскому каталогу.
...
Рейтинг: 0 / 0
15.04.2011, 00:36
    #37217551
Вывести список файлов, каталогов, подкаталов в Visual C++
И еще вопрос как грамотно закрыть хэндл на файл или хэнды на файлы, здесь же рекурсивный перебор, или же не надо париться - после выхода из процедуры хэндл как и любая локальная переменная корректно удалится?
...
Рейтинг: 0 / 0
15.04.2011, 10:31
    #37217884
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести список файлов, каталогов, подкаталов в Visual C++
Vladimir Mihailovich, а зачем нужна строка FindClose( handle ), как думаешь? ;-))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
13.12.2012, 15:56
    #38078014
null_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести список файлов, каталогов, подкаталов в Visual C++
Не подскажите, почему у меня при
handle = FindFirstFile(strSpec.c_str(), &fd);
Компилятор пишет: 'FindFirstFileW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
...
Рейтинг: 0 / 0
13.12.2012, 16:03
    #38078044
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести список файлов, каталогов, подкаталов в Visual C++
null_1Компилятор пишет: 'FindFirstFileW' : cannot convert parameter 1 from 'const
char *' to 'LPCWSTR'
Потому что эта функция хочет юникодные строки, а ты ей суёшь обычные. Не стоит связываться
с юникодом без базовых знаний.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывести список файлов, каталогов, подкаталов в Visual C++ / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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