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

Прочитать имя файла - C++

Восстановить пароль Регистрация
 
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
19.02.2013, 15:26     Прочитать имя файла #1
Подскажите, каким образом на С++ можно прочитать, и сохранить в строковой (символьной) переменной имя файла находящегося в известной папке.
Ну, скажем, на D:/files/ имеется файл 1.txt
нужно, чтобы после выполнения программы a == "1.txt"

Добавлено через 4 часа 38 минут
Ну, вот нашел что-то для вывода файлов корневого каталога дика С.

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
 #include <windows.h>
    #include <stdio.h>
     
    void showFiles( char *dir, char* mask );
     
    int main( void )
    {  
        showFiles("C:\\","*.*");
        return 0;
    }
     
    void showFiles( char* dir, char* mask )
    {
        HANDLE hFind;
        WIN32_FIND_DATA find_data;
        char f_dir[MAX_PATH];
     
        strcpy(f_dir,dir);
        strcat(f_dir,mask);
        
        hFind=FindFirstFile(f_dir,&find_data);
        if (hFind != INVALID_HANDLE_VALUE)
            do
            {
                if(!(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                    printf("%s\n",find_data.cFileName );    
            }while(FindNextFile(hFind,&find_data));
    }
Но выдаёт ошибку в строке 21, пишет f_dir не может быть типа char:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 15:46     Прочитать имя файла #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
 void showFiles( char *dir, char* mask );
     
    int main( void )
    {  
        showFiles(L"C:\\",L"*.*");
        return 0;
    }
     
    void showFiles( WCHAR* dir, WCHAR* mask )
    {
        HANDLE hFind;
        WIN32_FIND_DATA find_data;
        WCHAR f_dir[MAX_PATH];
     
        wcscpy(f_dir,dir);
        wcscat(f_dir,mask);
        
        hFind=FindFirstFile((LPCWSTR)f_dir,&find_data);
        if (hFind != INVALID_HANDLE_VALUE)
            do
            {
                if(!(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                    printf("%ls\n",find_data.cFileName );    
            }while(FindNextFile(hFind,&find_data));
    }
вот так работает
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
19.02.2013, 16:43  [ТС]     Прочитать имя файла #3
А у меня не компилируется.
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
  #include <windows.h>
    #include <stdio.h>
 
 
     void showFiles( char *dir, char* mask );
 
    int main( void )
    {
        showFiles(L"C:\\",L"*.*");
        return 0;
    }
 
    void showFiles( WCHAR* dir, WCHAR* mask )
    {
        HANDLE hFind;
        WIN32_FIND_DATA find_data;
        WCHAR f_dir[MAX_PATH];
 
        wcscpy(f_dir,dir);
        wcscat(f_dir,mask);
 
        hFind=FindFirstFile((LPCWSTR)f_dir,&find_data);
        if (hFind != INVALID_HANDLE_VALUE)
            do
            {
                if(!(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                    printf("%ls\n",find_data.cFileName );
            }while(FindNextFile(hFind,&find_data));
    }

для строки
C++
1
 showFiles(L"C:\\",L"*.*");
выдаёт:
еrror: cannot convert 'const wchar_t*' to 'char*' for argument '1' to 'void showFiles(char*, char*)'|


для строки
C++
1
 hFind=FindFirstFile((LPCWSTR)f_dir,&find_data);
выдаёт:
еrror: cannot convert 'const WCHAR*' to 'const CHAR*' for argument '1' to 'void* FindFirstFileA(const CHAR*, _WIN32_FIND_DATAA*)'|
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,605
Записей в блоге: 17
19.02.2013, 16:47     Прочитать имя файла #4
Используйте что то одно либо char ли wchar_t либо правильно используйте Windows типы...

А вообще я бы использовал boost::filesystem
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 17:05     Прочитать имя файла #5
Цитата Сообщение от LVV Посмотреть сообщение
для строки
C++
1
showFiles(L"C:\\",L"*.*");
выдаёт:
еrror: cannot convert 'const wchar_t*' to 'char*' for argument '1' to 'void showFiles(char*, char*)'|
замени
C++
1
void showFiles( char *dir, char* mask );
на
C++
1
void showFiles( WCHAR *dir, WCHAR* mask );
я пропустил)


Цитата Сообщение от LVV Посмотреть сообщение
для строки

C++
1
hFind=FindFirstFile((LPCWSTR)f_dir,&find_data)
;
выдаёт:
еrror: cannot convert 'const WCHAR*' to 'const CHAR*' for argument '1' to 'void* FindFirstFileA(const CHAR*, _WIN32_FIND_DATAA*)'|
затрудняюсь ответить, у меня MSVS 2010 на ней работает

Добавлено через 6 минут
Цитата Сообщение от aLarman Посмотреть сообщение
затрудняюсь ответить, у меня MSVS 2010 на ней работает
а нет могу напиши
C++
1
 hFind=FindFirstFileW((LPCWSTR)f_dir,&find_data)
Добавлено через 1 минуту
и в заголовочные добавь
C++
1
#include <TlHelp32.h>
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
19.02.2013, 18:51  [ТС]     Прочитать имя файла #6
aLarman, ОГРОМНОЕ спасибо

Добавлено через 18 минут
(на MSVS 2010 подключение <TlHelp32.h> не обязательно, работает и без него)

Если system("dir D: "); открывает текущую директорию, то как открыть указанную D:/files/ с помощью той же системной команды dir ???
Было бы намного проще. Я поколдовал... не получается...
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,605
Записей в блоге: 17
19.02.2013, 18:52     Прочитать имя файла #7
Используй ShellExecute()
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 21:02     Прочитать имя файла #8
C++
1
system("dir d:\files")
нэ?
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
19.02.2013, 21:07  [ТС]     Прочитать имя файла #9
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
system("dir d:\files")
нэ?
Не. Не катит такое...
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 21:16     Прочитать имя файла #10
Цитата Сообщение от LVV Посмотреть сообщение
Если system("dir D: "); открывает текущую директорию, то как открыть указанную D:/files/ с помощью той же системной команды dir ???
Цитата Сообщение от LVV Посмотреть сообщение
Не. Не катит такое...
у меня работает или я чего то не понимаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 21:41     Прочитать имя файла
Еще ссылки по теме:

Прочитать данные из файла C++
C++ Прочитать из файла
прочитать 5-ю строку из файла C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,605
Записей в блоге: 17
19.02.2013, 21:41     Прочитать имя файла #11
C++
1
system("dir d:\\files")
Yandex
Объявления
19.02.2013, 21:41     Прочитать имя файла
Ответ Создать тему
Опции темы

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