С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
#1

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

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

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

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

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

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

Вызов функции с неизвестным именем - C++
Я знаю, что напрямую нельзя вызвать функцию по имени, которое хранится в char* но, может как-то возможно сделать "финт-ушами"? Только...

Поиск файлов с определенным расширением и именем в различных папках - C++
Здравствуйте. Помогите написать программу, в которой будет осуществляться поиск файла определенного расширения в различных папках и в...

Считывание чисел из файла с расширением .txt - C++
Решаю на с++ задачу, которая называется «Вырубка деревьев». Входными данными являются два целых числа, записанных через пробел в файле...

Обратиться к файлу, не указывая полный путь к нему - C++
Открывая файл я указываю путь на файл который находится в подкаталоге. system("start imya_papki\\test.exe"); А можно ли теперь из этого...

Как создать файл с названием которого вводиться в консоль с расширением .txt - C++
c++

10
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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
Neonjke
18 / 18 / 1
Регистрация: 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
nameless
Эксперт С++
334 / 298 / 14
Регистрация: 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
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
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
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
14.07.2011, 00:12 #7
Я же не руками закомментиваю, а программно, а она сама слэши ставит.
0
Neonjke
18 / 18 / 1
Регистрация: 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
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.07.2011, 00:22 #9
Цитата Сообщение от Neonjke Посмотреть сообщение
Я правильно понимаю, что FindFileData.cFileName вернет мне полный путь к файлу в string?
http://msdn.microsoft.com/en-us/library/aa365740(v=vs.85).aspx
в std::string нужно упаковывать самому
0
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
14.07.2011, 00:28 #10
Нет, не полный. Просто имя. Но учитывая, что полный путь ты и так знаешь:
f ("E:\\vso_moio\\*.exe");

А файл у тебя один единственный в указанной директории, ты его легко скропаешь я думаю конкантекацией строк. Удачи!
0
Neonjke
18 / 18 / 1
Регистрация: 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
14.07.2011, 00:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2011, 00:30
Привет! Вот еще темы с ответами:

Поиск по .txt файлу - C++
Доброго времени суток . Есть char стока , которая записывается с клавиатуры . После этого нужно сравнить содержимое стоки , с содержимым...

Поиск по .txt файлу (RSS) - C++
Доброго времени суток. Пытаюсь придумать что-нибудь, чтобы работать с RSS без крутых кодов, что-то типа индусского кода. Сделал парсинг...

Получить доступ к .txt файлу и посчитать количество латинских символов в нём - C++
Получить доступ к .txt файлу и посчитать количество латинских букв в нём. Спасибо!

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.