18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
1

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

13.07.2011, 23:04. Показов 2044. Ответов 10
Метки нет (Все метки)

Ломаю голову...
По заданному пути, пусть будет C:\\, есть файл *.txt
Имя его неизвестно, однако это 100% единственный файл txt в этом каталоге.

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

Заранее благодарен
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2011, 23:04
Ответы с готовыми решениями:

Операторы условия, циклы с известным и неизвестным числом повторений
чтобы не париться с 3 темами закину 3 лабы в 1 :D порядок: задание - мой вариант(исправить ошибки)...

Послать на почту файл с неизвестным именем, но известным расширением
Проблема такая. каждый день в папку С:\1 падает файл, имя файла каждый день разное, расширения...

Требуется написать программу которая сохраняет этот файл как txt файл с тем же самым именем но с удаленным doc расширением.
Помогите разрешить следующую задачу. Существует некий файл Name.xml.doc эквивалент текстового файла...

Скачивание файла с неизвестным расширением
Здравствуйте. Нужен код, который будет скачивать файл с неизвестным расширением. Т.е. файл по...

10
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.07.2011, 23:41 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;
}
1
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
13.07.2011, 23:45  [ТС] 3
Вариант хороший, но установка Boost не радует...
у меня есть желание реализовать это через
C++
1
2
3
4
5
BOOL SearchFiles(
        LPCTSTR lpszFileName,                // Директория и маска файлов для поиска
        LPSEARCHFUNC lpSearchFunc,            // Функция, вызываемая для всех найденных файлов.
        BOOL bInnerFolders /* = TRUE */)    // TRUE - поиск в подпапках. 
                                            // FALSE - поиск только в заданной папке
Вот только я не знаю какая должна быть lpSearchFunk, чтобы она мне вернула string с полным path файла
0
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
13.07.2011, 23:59 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;
}
Запоздал, что-то я..(
1
быдлокодер
1722 / 909 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
14.07.2011, 00:03 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;
//}
1
Jupiter
14.07.2011, 00:06
  #6

Не по теме:

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

C
1
/* ....*/

0
быдлокодер
1722 / 909 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
14.07.2011, 00:12 7
Я же не руками закомментиваю, а программно, а она сама слэши ставит.
0
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
14.07.2011, 00:17  [ТС] 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?
0
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.07.2011, 00:22 9
Цитата Сообщение от Neonjke Посмотреть сообщение
Я правильно понимаю, что FindFileData.cFileName вернет мне полный путь к файлу в string?
http://msdn.microsoft.com/en-u... s.85).aspx
в std::string нужно упаковывать самому
0
быдлокодер
1722 / 909 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
14.07.2011, 00:28 10
Нет, не полный. Просто имя. Но учитывая, что полный путь ты и так знаешь:
f ("E:\\vso_moio\\*.exe");

А файл у тебя один единственный в указанной директории, ты его легко скропаешь я думаю конкантекацией строк. Удачи!
0
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
14.07.2011, 00:30  [ТС] 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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2011, 00:30
Помогаю со студенческими работами здесь

Создание списка объектов класса с заранее неизвестным именем (именем самих объектов)
Уважаемые программисты, не получается решить такую задачу: требуется создать приложение (в консоли)...

SFML - Картинки в файлах с неизвестным расширением
Всем привет! Часто вижу в файлах различных игр, что, например, текстуры от моделей хранятся в...

Запустить файл с неизвестным расширением как программу с ShellExecute
Здравствуйте. Как в моей программе запустить exe'шник, у которого изменено расширение (расширение...

Папка с неизвестным именем
Необходимо узнать имя папки.Известно её месторасположение , а имя нет


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru