Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 01.10.2014
Сообщений: 87

Поиск файлов в директории по маске и непонимание кодировки

29.10.2015, 17:29. Показов 1045. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне нужно написать программу, которая бы по маске, которая является аргументом, вывести соответствующие файлы. У меня почему то в неправильно программа считывает аргумент, и поэтому ничего не находит в директории
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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <tchar.h>
 
int main(int argc, TCHAR *argv[])
{
    HANDLE fd;
    WIN32_FIND_DATA FindFile;
    int i=2;
    printf("%s\n", argv[1]);//правильно выводит
        //если раскомментировать, то выходит с кодом -1.
        /*if (argc != 2)
    {
        _tprintf(TEXT("Usage: %s [target_file]\n"), argv[1]);
        return -1;
    }*/
    FindFile.cFileName[0] = '\0';
    //TCHAR string[] = L"C:\\Program Files\\i*";
    _tprintf(TEXT("Search file is %s\n"), argv[1]);//выводит вопросы
    fd = FindFirstFile(argv[0], &FindFile);
    if (fd == INVALID_HANDLE_VALUE)
        GetLastError();
    if (FindFile.cFileName[0] != '\0')
        printf("The first filename is %s\n",FindFile.cFileName);
    else
        printf("There are no such files!\n");
    while(FindNextFile(fd, &FindFile)){
        printf("The #%d filename is %s\n",i,FindFile.cFileName);
        i++;
    }
    char ch = getchar();
    FindClose(fd);
    return 0;
}
Аргумент у меня c кавычками, так как в противном случае пробел разрывает строку: "C:\\Program Files\\i*"
Что у меня неправильно и как вообще сделать так, чтобы я мог сам вводить образец для поиска?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2015, 17:29
Ответы с готовыми решениями:

Поиск по маске файлов рекурсивно
Была задача осуществить поиск файлов (во всех дисках и папках) по маске , которая вводится с клавиатуры. Но получается, что функция...

Поиск файлов по маске в каталоге
Программа выполняет поиск файлов в каталоге по заданной маске. Количество потоков равно количеству каталогов. Найденные файлы сохраняются...

Поиск и удаление файлов по маске в директории admin$ на удалённых машинах
Привет всем. Очень надеюсь на вас в данном вопросе! Пробежав по форму, я наткнулся на парочку тем с похожими вопросами, но попросту не могу...

2
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
29.10.2015, 19:57
mishula, почему в строке 22 argv[0]? Приведите пример, как именно запускаете.
0
0 / 0 / 1
Регистрация: 01.10.2014
Сообщений: 87
29.10.2015, 20:30  [ТС]
Да я просто и с argv[0], и argv[1] пробовал, так как меня смущало, что выход по коду -1. Ну я в visual studio в параметрах проекта сделал так, чтобы в качестве аргумента поступала строка "C:\\Program Files\\i*", ну и просто запускаю, а он выводит
С:\\Program Files\\i*
Search file is ??????????*??????
There are not such files!

Добавлено через 8 минут
Что еще интересно, такой код приводит к такому выводу
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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <tchar.h>
 
int main(int argc, TCHAR *argv[])
{
    HANDLE fd;
    WIN32_FIND_DATAW FindFile;
    int i=2;
    printf("%s\n", argv[1]);
    /*if (argc != 2)
    {
        _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
        return -1;
    }*/
    FindFile.cFileName[0] = '\0';
    fd = FindFirstFileW(L"C:\\Program Files\\i*", &FindFile);
    if (fd == INVALID_HANDLE_VALUE)
        GetLastError();
    if (FindFile.cFileName[0] != '\0')
        printf("The first filename is %s\n",FindFile.cFileName);
    else
        printf("There are no such files!\n");
    while(FindNextFileW(fd, &FindFile)){
        printf("The #%d filename is %s\n",i,FindFile.cFileName);
        i++;
    }
    char ch = getchar();
    FindClose(fd);
    return 0;
}
C:\\Program Files\\i*
The first filename is I
The #2 filename is I
и так до конца
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2015, 20:30
Помогаю со студенческими работами здесь

Удаление файлов в директории по маске
итак сдрасте....поискал в инете так и не нашёл.заранее благодарен :).у меня есть список вот string fileList = new string {...

Удаление файлов внутри директории по маске
удаление файлов зная директорию и не точную названию... Например@unlink($this-&gt;root_dir . '/engine/cache/dt_jdud3y8d6r2n7ud.tmp'); этот...

Получение имен файлов в директории по заданной маске
Можно ли это сделать налету с FileSystemObject, если, например, надо вывести все файлы в заданном каталоге которые начинаются на 'text_' и...

Копирование файлов по маске из заданной ранее директории переменной
Здраствуйте . Я начинающий. Создал код , при выполнении которого , при выборе в диалоговом окне папки, она тут же копируется в...

Список всех файлов и папок указанной директории по заданной маске
Здравствуйте! Требуется написать программу, используя FileNameFilter которая выведет на экран список всех файлов и папок указанной...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru