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

Символы кириллицы в названии файла

18.07.2021, 16:55. Показов 6192. Ответов 9

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня возникла одна проблема. Есть программа, которая получает список файлов указанной директории, все имена файлов записываются в вектор типа string, однако, файлы, которые содержат в своем названии символы кириллицы записываются в вектор неправильно, вследствие чего потом не получается с ними работать (открыть, прочитать и т.п). Очень прошу помочь мне с этой проблемой, потому что я вообще без понятия что делать =/

Буду сильно благодарен любой помощи
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.07.2021, 16:55
Ответы с готовыми решениями:

Нестандартные символы в названии файла базы данных
Добрый день. Работаю с базой данных *.dbf использую C++builder6. Кинул на форму компоненты ADOConnection, DataSource, ADOQuery. При этом...

Преобразование кириллицы в названии файла
не актуально.

Заглавные символы кириллицы заменить на строчные символы кириллицы
Доброго времени суток есть такая программка копировальщик. Из нее надо сделать чтобы она копировала текстовые файлы и заменяла заглавные...

9
фрилансер
 Аватар для Алексей1153
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
18.07.2021, 17:06
Лучший ответ Сообщение было отмечено _lUserl_ как решение

Решение

_lUserl_, используй юникодные версии функций WinAPI + std::wstring

Добавлено через 47 секунд
какой-нибудь пример кода с проблемой покажи
0
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280
18.07.2021, 17:07  [ТС]
Вот пример. Имя файла в действительности и то, что записалось в вектор
Миниатюры
Символы кириллицы в названии файла  
0
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280
18.07.2021, 17:08  [ТС]
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<windows.h>
#include<iostream>
#include <cstring>
#include <vector>
#include <clocale>
using namespace std;
 
 
vector <string> full_name_of_file;
void files(string path)
{
    vector <string> count_ff;
    WIN32_FIND_DATA FindFileData;
    HANDLE hf;
    string file_or_folder="", full_path="", path_ff="";
    full_path=path+"*";
 
 
    hf=FindFirstFile(full_path.c_str(), &FindFileData);
    if (hf!=INVALID_HANDLE_VALUE){
        do
        {
            file_or_folder=FindFileData.cFileName;
            if(file_or_folder.find(".")!=std::string::npos && file_or_folder!="." && file_or_folder!=".." && file_or_folder!="...")
                full_name_of_file.push_back(path+file_or_folder);
 
            else if (file_or_folder!="." && file_or_folder!=".." && file_or_folder!="...")
                count_ff.push_back(path+file_or_folder+"\\");
        }while (FindNextFile(hf,&FindFileData)!=0);
 
        for(int i=0; i<count_ff.size();i++)
            files(count_ff[i]);
        FindClose(hf);
    }
}
 
int main()
{
 
files("C:\\1\\");
for(int i =0;i<full_name_of_file.size();i++)
        cout<<full_name_of_file[i]<<endl;
}
А вот, собственно, сам код
0
фрилансер
 Аватар для Алексей1153
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
18.07.2021, 17:12
_lUserl_, да, рецепт подойдёт )

юникодные версии функций и структур заканчиваются на постфикс W
например
WIN32_FIND_DATAW
0
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280
18.07.2021, 17:12  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
std::wstring
А есть ли способ решить проблему без использования wstring?
0
фрилансер
 Аватар для Алексей1153
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
18.07.2021, 17:14
_lUserl_, можно перегонять юникод в utf8 и хранить его в std::string

Добавлено через 51 секунду
WideCharToMultiByte
0
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280
18.07.2021, 17:17  [ТС]
Спасибо, пойду попробую сделать что-нибудь
0
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280
19.07.2021, 13:46  [ТС]
В итоге переписал всё на wstring. Если кому надо, то вот код:
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<windows.h>
#include<iostream>
#include <cstring>
#include <vector>
#include <clocale>
using namespace std;
 
 
vector <wstring> full_name_of_file;
void files(wstring path)
{
    vector <wstring> count_ff;
    WIN32_FIND_DATAW FindFileData;
    HANDLE hf;
    wstring file_or_folder=L"", full_path=L"", path_ff=L"";
    full_path=path+L"*";
 
 
    hf=FindFirstFileW(full_path.c_str(), &FindFileData);
    if (hf!=INVALID_HANDLE_VALUE){
        do
        {
            file_or_folder=FindFileData.cFileName;
            if(file_or_folder.find(L".")!=std::string::npos && file_or_folder!=L"." && file_or_folder!=L".." && file_or_folder!=L"...")
                full_name_of_file.push_back(path+file_or_folder);
 
            else if (file_or_folder!=L"." && file_or_folder!=L".." && file_or_folder!=L"...")
                count_ff.push_back(path+file_or_folder+L"\\");
        }while (FindNextFileW(hf,&FindFileData)!=0);
 
        for(int i=0; i<count_ff.size();i++)
            files(count_ff[i]);
        FindClose(hf);
    }
}
 
int main()
{
setlocale(LC_ALL,"rus");
files(L"C:\\1\\");
for(int i =0;i<full_name_of_file.size();i++)
        wcout<<full_name_of_file[i]<<endl;
}
0
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
26.07.2021, 15:09
У Windows в каждый момент времени имеется две однобайтовые кодировки - OEM и ANSI.

Консоль по умолчанию работает в OEM, оконные программы - в ANSI.

Но при этом файловые функции даже у оконных программ всё равно по умолчанию работают с именами файлов в кодировке OEM. За переключение используемой ими кодировки отвечают функции SetFileApisToANSI() и SetFileApisToOEM().
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2021, 15:09
Помогаю со студенческими работами здесь

Удалить все символы из текстового файла, кроме букв кириллицы
Есть текстовый файл, где буквы кириллицы перемешаны с различными символами (как в бинарных файлах). Задача: удалить все, кроме...

Использование кириллицы в названии базы данных
Заранее прошу прощения за нестандартный вопрос. Название базы данных - 'цукс'. Подключался к ней и vs 2010 и vs 2012. Иногда без...

Заглавные символы кириллицы заменить на строчные латинские символы
Здравствуйте!Помогите пожалуйста решить вот эту задачку в Far менеджере.=(Заранее очень вам благодарна. Задача.Заглавные символы...

Символы в названии строк/столбцов в uitable
Подскажите, возможно ли добавлять над- подстрочные символы и символы греческого алфавита в названии строк в uitable?

Русские символы в названии ветви в Git
начал разбираться с git и писать простенькие программки. но у меня появилась проблема с русскими символами. сделал ветвь, назвал ее...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru