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

Как дописать к аргументу командной строки маску файла?

23.04.2015, 17:46. Показов 1075. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста разобраться аргументом командной строки я беру адрес каталога, в котором буду проводить поиск. Но как дописать в конец адреса маску файла сообразить не могу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
int main(int argc, char *argv[])
{
    setlocale(LC_CTYPE,"");
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
char put[MAX_PATH];
strncpy (put,argv[1],strlen(argv[1]));
//strcat( put, "*.txt ");
printf(put);
 hFind = FindFirstFile(put, &FindFileData);
 
 if (hFind == INVALID_HANDLE_VALUE)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2015, 17:46
Ответы с готовыми решениями:

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

Интерпретация командной строки. Файловые операции POSIX. Прошу помочь дописать программу
Стоит такое задание: Написать программу, которая обеспечивает работу команды вида : , где - a и - b несовместимые флаги - если...

Имя файла как аргумент командной строки
Здравствуйте! Программа получает имя файла как аргумент командной строки, причем при неправильной вводе или при отсутствии она должна...

12
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
23.04.2015, 20:31
ну например
C++ (Qt)
1
*.dat
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 41
23.04.2015, 23:40  [ТС]
так судя по всему я не правильно задал вопрос! Поясню. Предо мной стоит задание написать поисковик текстовых файлов по заданному каталогу. 1 этапом я Вывожу список файлов.
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
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
int main(int argc, char *argv[])
{
setlocale(LC_CTYPE,"");
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
 hFind = FindFirstFile(argv[1], &FindFileData);
 
 if (hFind == INVALID_HANDLE_VALUE) 
  {
    printf ("файл не найден %d\n",
             GetLastError ());
    return (0);
  } 
   else 
    {
    printf ("Первый файл %s\n", FindFileData.cFileName);
    
    
    while ( FindNextFile(hFind, &FindFileData) != 0 )
    {
    
    printf ("Следующий файл %s\n", FindFileData.cFileName);
 
    }
    printf ("Файлы закончились");
    FindClose(hFind);
    return (1);
    }
}
Каталог для поиска задается аргументом командной строки. соответственно для запуска я использовал конструкцию C:\адрес файла...\файл.exe C:\1\*.txt
на 2м шаге подключения файлов для поиска слова внутри столкнулся что мне нужен этот же агрумент только без маски файла! не могу сообразить как это реализовать. Т.Е. из C:\1\*.txt получить C:\1\

Добавлено через 9 минут
mh-coder, Или наоборот что бы в аргументе было записано C:\1\ а в коде дописывало в конце строки *.txt
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
24.04.2015, 09:43
Цитата Сообщение от mavric Посмотреть сообщение
на 2м шаге подключения файлов для поиска слова внутри столкнулся что мне нужен этот же агрумент только без маски файла! не могу сообразить как это реализовать. Т.Е. из C:\1\*.txt получить C:\1\
банальный поиск по строке знака *, да и вообще зачем это нужно?
вот моя фунция поиска по каталогам, которую писал для себя, можете посмотреть если захотите переделать под свои нужды(ходтя она и так универсальная)

C++ (Qt)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
bool ReadDir(const wstring &path,// путь  к каталогу
             const wstring &mask, // маска поиска
             int whot, // что вывести 0 - всё, 1 - файлы, 2 - папки
             bool rec, // читать подкоталоги да\нет
             bool fp, // выыодить полный путь(1) или тлько результат(0)
             wArray &result, // куда сохранить результат
             bool &Stop // 1 - работаем, 0 - прервать процесс работы
             ){
 
 
 
                 WIN32_FIND_DATA fd = { 0 };
 
                 wstring full_path = path;
                 if (full_path[full_path.length() - 1] != L'\\'){
                     full_path += L'\\';
                 }
                 wstring full_find_path = full_path + mask;
 
                 HANDLE hFind = FindFirstFile(full_find_path.c_str(),       
                     &fd);                  
 
                 if (hFind == INVALID_HANDLE_VALUE)
                 {
                     return 0;
                 }
 
                 do
                 {
 
                     if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))  {
                         if (wcscmp(fd.cFileName, L".") != 0 && wcscmp(fd.cFileName, L"..") != 0){
 
                             if (rec == true){
                                 ReadDir(full_path + fd.cFileName,mask, whot, rec, fp, result,Stop);
                             }
 
                             if (whot == 2 || whot == 0){
                                 if (fp == true){
                                     result.push( full_path + fd.cFileName);
                                 }
                                 else{
                                     result.push( fd.cFileName);
                                 }
                             }
                         }
 
                     }
                     else{
                         if (whot == 1 || whot == 0){
                             if (fp == true){
                                 result.push( full_path + fd.cFileName);
                             }
                             else{
                                 result.push( fd.cFileName);
                             }
 
                         }
 
                     }
                     if(!Stop){
                         return 0;
                     }
                 } while (FindNextFile(hFind, &fd));
 
                 if( GetLastError() == 18 ){
                     SetLastError(0);
                 }
 
                 FindClose(hFind);
 
                 return 0;
}
1
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 41
24.04.2015, 14:05  [ТС]
mh-coder, Спасибо за функцию. Очень понравилась идея сделать константой путь файла. Скажу честно в программировании совсем новичок. Подскажи пожалуйста а как ты объявлял Wstring! Если я правильно нашел информацию, по идее это тип файла. Но когда я его начал пробовать использовать в своей программе у меня стал ругаться что это не известный идентификатор.

Добавлено через 30 минут
А блин сообразил! забыл подключить пространство имен((( туплю

Добавлено через 48 минут
mh-coder, блин теперь не могу сообразить как мне перевести из char в wstring(((

C++ (Qt)
1
2
3
4
5
using namespace std;
int main(int argc, char *argv[])
{
wstring path = argv[1];
}
не подскажешь как реализовать такое преобразование?
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
24.04.2015, 14:08
Цитата Сообщение от mavric Посмотреть сообщение
не подскажешь как реализовать такое преобразование?
C++ (Qt)
1
2
3
4
5
6
7
8
9
wstring CharToWchar( const string& str){
 
    wchar_t * res = (wchar_t *)malloc(str.length() * sizeof(wchar_t)); 
    ZeroMemory(res,str.length() * sizeof(wchar_t));
    res[mbstowcs(res,str.c_str(),str.length())] = L'\0';
 
    wstring result(res,str.length());
    return result;
}
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 41
24.04.2015, 14:32  [ТС]
mh-coder, спасибо

Добавлено через 19 минут
mh-coder,
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <string>
using namespace std;
wstring CharToWchar( const string& str){
    wchar_t * res = (wchar_t *)malloc(str.length() * sizeof(wchar_t)); 
    ZeroMemory(res,str.length() * sizeof(wchar_t));
    res[mbstowcs(res,str.c_str(),str.length())] = L'\0';
 
    wstring result(res,str.length());
    return result;
}
int main(int argc, char *argv[])
{
setlocale(LC_CTYPE,"");
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
wstring result;
CharToWchar(argv[1]);
wstring path=result;
я правильно понял как его использовать?

Добавлено через 1 минуту
прости понимаю, что тебя уже замучал своей глупостью
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
24.04.2015, 15:36
функция принимает char( или string) и возвращает wstring

C++ (Qt)
1
2
wstring result;
 result =  CharToWchar(argv[1]);
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 41
24.04.2015, 16:41  [ТС]
mh-coder,
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
int main(int argc, char *argv[])
{
setlocale(LC_CTYPE,"");
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
wstring result;
 result =  CharToWchar(argv[1]);
 if (result[result.length() - 1] != L'\\'){
     result += L'\\';}
 hFind = FindFirstFile(result.c_str(), &FindFileData);
хм а чего он ругается на result? error C2664: FindFirstFileA: невозможно преобразовать параметр 1 из "const wchar_t *" в "LPCSTR"
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
24.04.2015, 19:46
Цитата Сообщение от mavric Посмотреть сообщение
хм а чего он ругается на result? error C2664: FindFirstFileA: невозможно преобразовать параметр 1 из "const wchar_t *" в "LPCSTR"
просто вы рвботаете в консоле и FindFirstFile требует от вас char, тоесть используйте string вместо wstring
1
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 41
25.04.2015, 19:37  [ТС]
mh-coder,
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
#define str "C:\\1\\ " //argv[1]
char Ful_path[1024];
strcpy(Ful_path,str);
strcpy(name1,FindFileData.cFileName);
i=0;
    int k;
    k=strlen(name1);
while (i != k )
    {
        Ful_path[strlen(Ful_path)+i-1]=name1[i];
        i++;
    }
А подскажи еще почему он дописывает не все символы в Ful_path. т.е. результат получается Ful_path принял значение C:\1\sd и пустые символы. Значение Name1 sdc.txt
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
25.04.2015, 22:29
Цитата Сообщение от mavric Посмотреть сообщение
А подскажи еще почему он дописывает не все символы в Ful_path. т.е. результат получается Ful_path принял значение C:\1\sd и пустые символы. Значение Name1 sdc.txt
дам хороший совет, привыкайте использовать дебагер, и тогда все проблемы решатся сами, да и почитайте про память и указатели чтобы не писать ерунду, помоиму такая запись лучше вашего цикла

C
1
strcpy(&Ful_path[strlen(Ful_path)],name1);
0
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 41
25.04.2015, 23:37  [ТС]
mh-coder, Если не сложно напиши название книг где это хорошо описывается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2015, 23:37
Помогаю со студенческими работами здесь

NASM - передать имя файла для инклюда как макрос из командной строки
Привет! Достался мне в наследство код, написанный на nasm'е. Для компиляции используется такая система: где то в коде есть такая строка...

В конец каждой строки текстового файла дописать количество символов этой строки
Помогите, нужно : &quot;В конец каждой строки текстового файла дописать количество символов этой строки&quot;. Получается только в начало, не...

Написать программу копирования файла. В конец каждой строки файла дописать количество пробелов в строке
Чтение происходит блоками. Обработать ошибки Я пока просто смогла скопировать один файл в другой, а как добавить количество пробелов...

Как сделать считывание строки через маску в С++?
Здравствуйте, Если имеется текстовый файл: ---------------------------------------------- 1010203 21065 ...

Чтение файла из командной строки
Набрал код из книги Шилдта (8-е изд.), глава 13 &quot;Чтение и запись данных в файлы&quot;. В командной строке из каталога с файлом программы ее...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru