Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
1

Шаблоны имен

18.09.2013, 20:12. Показов 1219. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер! Пожалуйста помогите разобраться с этими шаблонами имен, а то дело дальше не движется. В указанной директории (видимость скрытых файлов включил) 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");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2013, 20:12
Ответы с готовыми решениями:

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если...

Использование имен предопределенных объектов в качестве имен переменных
Есть код: #include &lt;iostream&gt; using namespace std; void func() { int cout; cout &lt;&lt;cout...

Не возникает ли коллизия имен, если использовать два пространства имен, и в каждом из них будут одноименные?
Вот например namespace nms1 { int gh; } namespace nms2 { int gh;

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис)
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем,...

10
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.09.2013, 20:17 2
Цитата Сообщение от ArkTaS Посмотреть сообщение
видимость скрытых файлов включил
а системных?
1
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
18.09.2013, 21:12  [ТС] 3
Croessmah, Отлично одним вопросом меньше, совсем забыл про них ) Теперь бы понять когда какие символы в качестве аргумента поиска указывать, когда "//", "\\" или по одному '/', '\' В нете нашел только: *.* - все файлы; * подозреваю что для этого аргумента будет искать и файлы и папки; *.name - все файлы с разрешением name(но этот шаблон для подсчета не пригодится)

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

Добавлено через 1 минуту
Цитата Сообщение от ArkTaS Посмотреть сообщение
И как отличить папку от файла ?
Где?
0
1 / 1 / 1
Регистрация: 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("..")))
Непонятно условие, если имя фала "." или ".." то совершается либо переход в новый каталог либо инкремент счетчика файлов
0
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
18.09.2013, 22:55 8
. - текущий каталог
.. - каталог уровнем выше
кажись так )

Добавлено через 30 секунд
добавь проверку чтобы игнорировались эти имена
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
18.09.2013, 23:05  [ТС] 9
m1Rr0r, Зачем их игнорировать ? я попробовал удалить их и программа зациклилась в бесконечность. Про уровни тоже не понятно, почему имена файлов/каталогов сравнивают с какими то символами. Какой то вынос мозга (
0
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
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 минуту
Для списка всех файлов, внутри директории и поддиректорий, используй рекурсию.
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
19.09.2013, 13:01  [ТС] 11
m1Rr0r, Об атрибутах для различия фалов и папок то что я уже в курсе я написал выше. Далле обсуждается рабочий код Подсчет количества файлов в папке, размер которых не превышает указанный где для того что бы рекурсия работала нужно использовать проверку if ( tstring(pfd->cFileName) != tstring(_T(".")) && tstring(pfd->cFileName) != tstring(_T("..")))
0
19.09.2013, 13:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2013, 13:01
Помогаю со студенческими работами здесь

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов...

Хранить шаблоны документов в базе и выводить данные в эти шаблоны
Доброго времени суток. Интересует вопрос: мне необходимо формировать вордовские документы по...

Чем отличаются шаблоны HTML и шаблоны WordPress
В чём различие между шаблонами HTML и WordPress. Кроме того, что создаются они разными способами....

Имя типа или пространства имен отсутствует в пространстве имен
Подскажите решение проблемы. Целиком код:


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru