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

Обратиться к файлу с неизвестным именем, но известным расширением (TXT) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
13.07.2011, 23:04     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #1
Ломаю голову...
По заданному пути, пусть будет C:\\, есть файл *.txt
Имя его неизвестно, однако это 100% единственный файл txt в этом каталоге.

Как мне выцепить его имя (а желательно полный путь к нему) средствами c++?
Среда visual studio 2010

Заранее благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2011, 23:04     Обратиться к файлу с неизвестным именем, но известным расширением (TXT)
Посмотрите здесь:

С++ Считывание чисел из файла с расширением .txt C++
C++ Вызов функции с неизвестным именем
операторы условия, циклы с известным и неизвестным числом повторений C++
C++ В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt
Получить доступ к .txt файлу и посчитать количество латинских символов в нём C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.07.2011, 23:41     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #2
например, но надо ставить boost
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <boost\filesystem.hpp>
#include <algorithm>
#include <iostream>
#include <regex>
 
namespace fs = boost::filesystem;
 
int main()
{
    std::regex reg(".txt");
 
    std::for_each(fs::directory_iterator(fs::path("C:\\"))
                  , fs::directory_iterator()
                  , [&reg](const fs::path & p)
    {
        if (fs::is_regular_file(p) && std::regex_search(p.string().c_str(), reg))
            std::cout << p.string() << '\n';
    });
  
    std::getchar();
    return 0;
}
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
13.07.2011, 23:45  [ТС]     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #3
Вариант хороший, но установка Boost не радует...
у меня есть желание реализовать это через
C++
1
2
3
4
5
BOOL SearchFiles(
        LPCTSTR lpszFileName,                // Директория и маска файлов для поиска
        LPSEARCHFUNC lpSearchFunc,            // Функция, вызываемая для всех найденных файлов.
        BOOL bInnerFolders /* = TRUE */)    // TRUE - поиск в подпапках. 
                                            // FALSE - поиск только в заданной папке
Вот только я не знаю какая должна быть lpSearchFunk, чтобы она мне вернула string с полным path файла
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
13.07.2011, 23:59     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #4
Neonjke,

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
#include <iostream>
#include <string>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/regex.hpp>
 
int main()
{
    boost::filesystem::path path_to_file("С:\\");
    boost::regex reg("[A-Za-z0-9].txt");
 
    if (boost::filesystem::exists(path_to_file))
    {
        boost::filesystem::directory_iterator end_ptr;
        for (boost::filesystem::directory_iterator ptr(path_to_file); ptr != end_ptr; ++ptr)
        {
            if (!boost::filesystem::is_directory(ptr->status()))
                if (boost::regex_search(ptr->path().string().c_str(), reg))
                    std::cout << *ptr << std::endl;
        }
    }
 
    return 0;
}
Запоздал, что-то я..(
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
14.07.2011, 00:03     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #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
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <windows.h>
#include <conio.h>
int f (char* ima_direktorii_i_rashirenie){
        WIN32_FIND_DATA FindFileData;
        HANDLE hf;
        hf = FindFirstFile(ima_direktorii_i_rashirenie,&FindFileData);
        if(hf != INVALID_HANDLE_VALUE){
                do{
                        printf("%s\n",FindFileData.cFileName);
                }
                while(FindNextFile(hf,&FindFileData) != 0);
                FindClose(hf);
        }
        getch();
        return 0;
}
int main(){
//        f ("C:\\*.txt");
//        f (".\\*");
        f (".\\ra_*.exe");
        getch();
        return 0;
}
 
//Кому охота НЕ ИСПОЛЬЗОВАТЬ функцию, может использовать этот вариант
//#include <stdio.h>
//#include <windows.h>
//#include <conio.h>
//int main(){
//        WIN32_FIND_DATA FindFileData;
//        HANDLE hf;
//        hf = FindFirstFile("C:\\*.txt",&FindFileData);
//        if(hf != INVALID_HANDLE_VALUE){
//                do{
//                        printf("%s\n",FindFileData.cFileName);
//                }
//                while(FindNextFile(hf,&FindFileData) != 0);
//                FindClose(hf);
//        }
//        getch();
//        return 0;
//}
Jupiter
14.07.2011, 00:06
  #6

Не по теме:

многострочные комментарии уже отменили?

C
1
/* ....*/

kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
14.07.2011, 00:12     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #7
Я же не руками закомментиваю, а программно, а она сама слэши ставит.
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
14.07.2011, 00:17  [ТС]     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #8
Цитата Сообщение от kravam Посмотреть сообщение
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
#include <stdio.h>
#include <windows.h>
#include <conio.h>
int f (char* ima_direktorii_i_rashirenie){
        WIN32_FIND_DATA FindFileData;
        HANDLE hf;
        hf = FindFirstFile(ima_direktorii_i_rashirenie,&FindFileData);
        if(hf != INVALID_HANDLE_VALUE){
                do{
                        printf("%s\n",FindFileData.cFileName);
                }
                while(FindNextFile(hf,&FindFileData) != 0);
                FindClose(hf);
        }
        getch();
        return 0;
}
int main(){
//        f ("C:\\*.txt");
//        f (".\\*");
        f (".\\ra_*.exe");
        getch();
        return 0;
}
 
//Кому охота НЕ ИСПОЛЬЗОВАТЬ функцию, может использовать этот вариант
//#include <stdio.h>
//#include <windows.h>
//#include <conio.h>
//int main(){
//        WIN32_FIND_DATA FindFileData;
//        HANDLE hf;
//        hf = FindFirstFile("C:\\*.txt",&FindFileData);
//        if(hf != INVALID_HANDLE_VALUE){
//                do{
//                        printf("%s\n",FindFileData.cFileName);
//                }
//                while(FindNextFile(hf,&FindFileData) != 0);
//                FindClose(hf);
//        }
//        getch();
//        return 0;
//}
Я правильно понимаю, что FindFileData.cFileName вернет мне полный путь к файлу в string?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.07.2011, 00:22     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #9
Цитата Сообщение от Neonjke Посмотреть сообщение
Я правильно понимаю, что FindFileData.cFileName вернет мне полный путь к файлу в string?
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
в std::string нужно упаковывать самому
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
14.07.2011, 00:28     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #10
Нет, не полный. Просто имя. Но учитывая, что полный путь ты и так знаешь:
f ("E:\\vso_moio\\*.exe");

А файл у тебя один единственный в указанной директории, ты его легко скропаешь я думаю конкантекацией строк. Удачи!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2011, 00:30     Обратиться к файлу с неизвестным именем, но известным расширением (TXT)
Еще ссылки по теме:

C++ Почему тип "bool" работает в файле с расширением .cpp и не работает в файле с расширением .c?
Как создать файл с названием которого вводиться в консоль с расширением .txt C++
C++ Записать в text3.txt строки, которые есть и в text1.txt, и в text2.txt

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

Или воспользуйтесь поиском по форуму:
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
14.07.2011, 00:30  [ТС]     Обратиться к файлу с неизвестным именем, но известным расширением (TXT) #11
Благодарю, это полностью решает мою проблему)))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void find (char* PathAndName)
{
        WIN32_FIND_DATA FindFileData;
        HANDLE hf;
        hf = FindFirstFile(PathAndName,&FindFileData);
        if(hf != INVALID_HANDLE_VALUE){
                while(FindNextFile(hf,&FindFileData));            
                          printf("%s\n",FindFileData.cFileName);            
                FindClose(hf);
        system("pause");
}
 
int main(){
find ("C:\\*.txt");
system("pause");
        return 0;
}
Yandex
Объявления
14.07.2011, 00:30     Обратиться к файлу с неизвестным именем, но известным расширением (TXT)
Ответ Создать тему
Опции темы

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