Форум программистов, компьютерный форум CyberForum.ru

Шаблоны имен - C++

Восстановить пароль Регистрация
 
ArkTaS
1 / 1 / 0
Регистрация: 01.07.2013
Сообщений: 127
18.09.2013, 20:12     Шаблоны имен #1
Добрый вечер! Пожалуйста помогите разобраться с этими шаблонами имен, а то дело дальше не движется. В указанной директории (видимость скрытых файлов включил) windows7 видит 49 элементов (37 папок и 12 файлов). Но моя программа насчитала 52. Если укажу другие координаты например "E:\\Games\\*" где винда показывает 3 папки, а программа выдает 5. Где я накосячил ? Еще вопрос как различить папки и файлы т.к собираюсь дальше посчитать количество файлов и во всех вложенных папках если таковые имеются для заданного адреса ?
C++
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
#include <iostream>
#include <string>
#include <windows.h>
#include <winbase.h>
using namespace std;
#ifdef _UNICODE
    typedef std::wstring t_string;
#else
    typedef std::string t_string;
#endif              
void main()
{
    setlocale( LC_ALL,"Russian" ); 
    WIN32_FIND_DATA sss;
    HANDLE f;
    int count=0;
    f = FindFirstFile(L"E:\\*", &sss);
    if (f != INVALID_HANDLE_VALUE)
    {
        count++;
        while( FindNextFile(f, &sss) )
        {
        count++;
        }
    }
    else
    cout<<endl<< " В директории нет файлов ";
    cout<<" Количество файлов "<<count;
    cout<<endl;
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2013, 20:12     Шаблоны имен
Посмотрите здесь:

C++ Декорирование имен
C++ Пространство имен
конфликт имен C++
C++ пространство имен
C++ Длина имен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
18.09.2013, 20:17     Шаблоны имен #2
Цитата Сообщение от ArkTaS Посмотреть сообщение
видимость скрытых файлов включил
а системных?
ArkTaS
1 / 1 / 0
Регистрация: 01.07.2013
Сообщений: 127
18.09.2013, 21:12  [ТС]     Шаблоны имен #3
Croessmah, Отлично одним вопросом меньше, совсем забыл про них ) Теперь бы понять когда какие символы в качестве аргумента поиска указывать, когда "//", "\\" или по одному '/', '\' В нете нашел только: *.* - все файлы; * подозреваю что для этого аргумента будет искать и файлы и папки; *.name - все файлы с разрешением name(но этот шаблон для подсчета не пригодится)

Добавлено через 17 минут
Вот пример Подсчет количества файлов в папке, размер которых не превышает указанный Здесь человек использует символ '/' разделяющий каталоги и папки и все работает, мне к примеру в этой теме WIN32_FIND_DATA для поиска конкретного файла пришлось писать двойной обратный сплеш для поиска конкретного файла "E:\\Sanni.txt". Скиньте если не сложно название книги или ссылку где можно прочесть об этом. А то скачал несколько книг по WinAPi а там только одни формы
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.09.2013, 21:14     Шаблоны имен #4
Цитата Сообщение от ArkTaS Посмотреть сообщение
Здесь человек использует символ '/' разделяющий каталоги и папки и все работает,
А у вас не работает? Это обратный слеш нужен двойной.
ArkTaS
1 / 1 / 0
Регистрация: 01.07.2013
Сообщений: 127
18.09.2013, 21:23  [ТС]     Шаблоны имен #5
alsav22, Проверил работает, я виндоус юзер, с командной строкой раньше не работал и не знал этих фишек. А в чем разница между "\\" и '/' ? И как отличить папку от файла ?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.09.2013, 21:57     Шаблоны имен #6
Цитата Сообщение от ArkTaS Посмотреть сообщение
А в чем разница между "\\" и '/' ?
Без понятия, знаю только, что и так, и так можно.

Добавлено через 1 минуту
Цитата Сообщение от ArkTaS Посмотреть сообщение
И как отличить папку от файла ?
Где?
ArkTaS
1 / 1 / 0
Регистрация: 01.07.2013
Сообщений: 127
18.09.2013, 22:54  [ТС]     Шаблоны имен #7
Для чего здесь эта проверка Подсчет количества файлов в папке, размер которых не превышает указанный if ( tstring(pfd->cFileName) != tstring(_T(".")) && tstring(pfd->cFileName) != tstring(_T("..")))tstring(_T("..")))

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
И как отличить папку от файла ?
Уже понял если я не ошибаюсь то при указании аргумента *.* для поиска ищет и файлы и папки, думаю можно и * указать. Ну а отличают их по атрибуту File Attribute Constants в dwFileAttributes

Добавлено через 31 минуту
С ошибкой скопировал, правильно
C++
1
if ( tstring(pfd->cFileName) != tstring(_T(".")) && tstring(pfd->cFileName) != tstring(_T("..")))
Непонятно условие, если имя фала "." или ".." то совершается либо переход в новый каталог либо инкремент счетчика файлов
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
18.09.2013, 22:55     Шаблоны имен #8
. - текущий каталог
.. - каталог уровнем выше
кажись так )

Добавлено через 30 секунд
добавь проверку чтобы игнорировались эти имена
ArkTaS
1 / 1 / 0
Регистрация: 01.07.2013
Сообщений: 127
18.09.2013, 23:05  [ТС]     Шаблоны имен #9
m1Rr0r, Зачем их игнорировать ? я попробовал удалить их и программа зациклилась в бесконечность. Про уровни тоже не понятно, почему имена файлов/каталогов сравнивают с какими то символами. Какой то вынос мозга (
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
19.09.2013, 12:00     Шаблоны имен #10
Цитата Сообщение от ArkTaS Посмотреть сообщение
m1Rr0r, Зачем их игнорировать ?
Извиняюсь не вник в тему)
Чтобы узнать файл или папка, проверить атрибут
C++
1
dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
Добавлено через 25 минут
C++
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
46
47
48
49
#include <windows.h>
#include <iostream>
#include <string>
#ifdef _UNICODE
    typedef std::wstring t_string;
#else
    typedef std::string t_string;
#endif    
using namespace std;
 
 
int main(int argc, char **argv)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
 
    setlocale(LC_ALL, "russian");
    string str;
    if(argv[1] == NULL)
    {
        cout << "Enter path: ";
        getline(cin, str);
        str.append("\\*.*");
    }
    else
        str = str.append(argv[1]) + "\\*.";
 
    printf ("Target path %s\n", str.c_str());
 
    hFind = FindFirstFile(str.c_str(), &FindFileData);
    long dir_count = 0;
    long file_count = 0;
    do  {
        if(!(FindFileData.dwFileAttributes &  FILE_ATTRIBUTE_DIRECTORY))
        {
            cout << "\t";
            file_count++;
        }
        dir_count++;
        cout << FindFileData.cFileName << endl;
 
 
    }while(FindNextFileA(hFind,&FindFileData));
    cout << "Папок => " << dir_count << endl;
    cout << "Файлов => " << file_count << endl;
    FindClose(hFind);
    system("pause");
    return 0;
 }
Добавлено через 1 минуту
Для списка всех файлов, внутри директории и поддиректорий, используй рекурсию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 13:01     Шаблоны имен
Еще ссылки по теме:

Пространство имен C++
C++ Использование имен предопределенных объектов в качестве имен переменных
C++ Не возникает ли коллизия имен, если использовать два пространства имен, и в каждом из них будут одноименные?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ArkTaS
1 / 1 / 0
Регистрация: 01.07.2013
Сообщений: 127
19.09.2013, 13:01  [ТС]     Шаблоны имен #11
m1Rr0r, Об атрибутах для различия фалов и папок то что я уже в курсе я написал выше. Далле обсуждается рабочий код Подсчет количества файлов в папке, размер которых не превышает указанный где для того что бы рекурсия работала нужно использовать проверку if ( tstring(pfd->cFileName) != tstring(_T(".")) && tstring(pfd->cFileName) != tstring(_T("..")))
Yandex
Объявления
19.09.2013, 13:01     Шаблоны имен
Ответ Создать тему
Опции темы

Текущее время: 23:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru