Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 03.09.2018
Сообщений: 71

Сохранение пути файла в wchar_t

09.11.2018, 21:36. Показов 2024. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа для копирования файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "pch.h"
#include <iostream>
#include < windows.h> 
using namespace std;
 
 
 
    int main()
    {
 
        const wchar_t *filename_in;
        const wchar_t *filename_out;
        char file[] = "D:/папка/1.txt";
        char file1[] = "D:/папка/FF/1.txt";
 
    
        CopyFile((LPCWSTR)file, (LPCWSTR)file1, FALSE);
        return 0;
    }
код ниже не работает как надо, но если просто забить текст как
C++
1
CopyFile(L"D:/папка/1.txt", L"D:/папка/FF/1.txt", FALSE);
то код работает нормально. Вопрос в том как правильно перенести текст в LPCWSTR, чтобы путь к файлу распознался правильно.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.11.2018, 21:36
Ответы с готовыми решениями:

Почему const wchar_t* воспринимается как wchar_t* ?
Здравствуйте. Я написал вот так: const wchar_t* dir = directory.c_str(); StartModule(dir); и такая ошибка появляется : ...

Функция для считывания символа из файла в переменную wchar_t
Вот такой вот в общем код. Какой функцией можно считывать посимвольно символы из файла в переменную wchar_t? get(s) не подходит,...

Wchar_t и unsigned wchar_t в windows
Печально, но факт: wchar_t - 2 байта, unsigned wchar_t - 4 байта Вопрос1: используется ли unsigned wchar_t для хранения...

22
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.11.2018, 21:44
C
const wchar_t *filename_in = L"D:/папка/1.txt";
или

C
wchar_t file[] = L"D:/папка/1.txt";
0
1 / 1 / 0
Регистрация: 03.09.2018
Сообщений: 71
10.11.2018, 20:11  [ТС]
Спасибо за ответ, но проблема в том, что вы предлагаете задать текст вручную. Необходимо текст например введенный из консоли передать в переменную, но без параметра L перед кавычками он не распознается правильно. Вот нужно так передать текст из консоли или переменной, чтобы он мог распознаться в функции.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.11.2018, 20:17
Цитата Сообщение от degree128 Посмотреть сообщение
но проблема в том, что вы предлагаете задать текст вручную
Как вопрос задал, такой ответ и получил

Цитата Сообщение от degree128 Посмотреть сообщение
Вот нужно так передать текст из консоли или переменной, чтобы он мог распознаться в функции
Например, через wscanf
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
10.11.2018, 20:19
https://msdn.microsoft.com/EN-... hv.2).aspx
0
Evg
10.11.2018, 20:34

Не по теме:

L0M, если изначально работать с char'ами, то нет вообще никакого смысла заниматься мазохизмом с постоянным перекодированием в wchar'ы. Это будет сильно смахивать на то, как на фотоаппарат ставят дерьмовые линзы и матрице на 100500 мегапикселей. Т.е. либо работать с char'ами, изначально понимая, что доступный набор символов будет очень сильно ограничен, либо нормально работать с wchar'ами, без извращений

0
1 / 1 / 0
Регистрация: 03.09.2018
Сообщений: 71
11.11.2018, 15:48  [ТС]
Можете помочь с такой проблемой. Если изначально использовать wchar_t, то код ниже
C++
1
2
3
4
5
6
    int main()
    {
        wchar_t file[] = L"текст";
        wcout << file << endl;
                 return 0;
          }
не выводит в консоль текста, с чем это связанно.

Добавлено через 6 минут
Спасибо всем за ответы, разобрался с предыдущим вопросом. Если кому то нужно, то просто необходимо дописать в main()
C++
1
        setlocale(LC_ALL, "");
и всё заработает
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
11.11.2018, 17:21
Цитата Сообщение от Evg Посмотреть сообщение
Например, через wscanf
Только wcsanf отличается wchar'овой форматной строкой.
Для ввода wchar_t в переменную достаточно обычного scanf с флагом "%ls"
Цитата Сообщение от Evg Посмотреть сообщение
Т.е. либо работать с char'ами, изначально понимая, что доступный набор символов будет очень сильно ограничен
Откуда информация об ограничении? Обычный char вполне совместим со стандартной кодировкой UTF-8, а там все символы. Правда, небольшой геморрой с последующим анализом, но вполне превозмогаемый.
0
Evg
11.11.2018, 17:31

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Правда, небольшой геморрой с последующим анализом, но вполне превозмогаемый
Геморрой ради геморроя. Вместо того, чтобы разобраться/научиться, как делать по-человечески

0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
11.11.2018, 18:43
Цитата Сообщение от Evg Посмотреть сообщение
разобраться/научиться, как делать по-человечески
Не всегда нужен сильный анализ юникодного текста, там достаточно и ручного отслеживания границ символов.
Зато wchar_t занимает в 2 - 4 раза больше места, плюс собственные особенности обработки.
Как обычно, подбираем инструмент под задачу.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.11.2018, 18:55
COKPOWEHEU, если там WinAPI, то как раз utf-8 будет проблемным во всех смыслах.
И экономия тоже сомнительная.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
11.11.2018, 23:15
Цитата Сообщение от nmcf Посмотреть сообщение
COKPOWEHEU, если там WinAPI, то как раз utf-8 будет проблемным во всех смыслах.
Да с winapi проблемы на каждом шагу
Если достаточно чтения текста из файла и вывода в консоль / экран, без преобразований, utf-8 достаточно. А это тоже не такая редкая задача.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.11.2018, 08:54
COKPOWEHEU, с WinAPI всё нормально.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
12.11.2018, 09:12
nmcf, из того с чем столкнулся лично и вспомнил за пару минут:
- километровые и обычно ненужные аргументы у большинства функций. Посмотрите хотя бы на работу с файлами.
- разные функции для однобайтной (cp1251 в русифицированной) и системной (utf-16) кодировок. Что мешало использовать utf-8 в качестве системной и допилить существующие функции чтобы они понимали ее?
Ну плюс странный подход с неявными зависимостями (та же работа с файлами, где можно повесить коллбэк и потом его отлавливать), но это скорее вкусовщина.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.11.2018, 10:22
Что значит ненужные аргументы? Может, ты просто не понял их назначение или они конкретно в твоём случае не требуются?
utf-8 не позволяет прямо индексировать строку. Ты, я вижу, любитель Linux. Там решили делать на utf-8, а Microsoft использует utf-16, поэтому и пришлось делать эти функции для совместимости.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
12.11.2018, 11:29
Цитата Сообщение от nmcf Посмотреть сообщение
Что значит ненужные аргументы? Может, ты просто не понял их назначение или они конкретно в твоём случае не требуются?
Перечитайте мое сообщение внимательнее. Там написано "обычно ненужные". Редко используемые. Вроде security attributes, которые зачем-то нужны в операциях чтения и записи файлов.
Цитата Сообщение от nmcf Посмотреть сообщение
utf-8 не позволяет прямо индексировать строку.
Имеется в виду проблема что следующий байт не обязательно относится к следующему символу? Но в utf-16 та же проблема.
Цитата Сообщение от nmcf Посмотреть сообщение
Ты, я вижу, любитель Linux
Да, и после него подход winapi выглядит нелогичным и переусложненным.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.11.2018, 13:08
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но в utf-16 та же проблема
Только если кодировать весь объём unicode.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вроде security attributes, которые зачем-то нужны в операциях чтения и записи файлов.
Прочитай, для чего они нужны. В Windows вообще более сложная система прав доступа.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
12.11.2018, 14:37
Цитата Сообщение от nmcf Посмотреть сообщение
Только если кодировать весь объём unicode.
Но мы же не можем заранее знать какие данные предстоит обрабатывать. Значит либо реализовывать поддержку всего юникода, либо сразу говорить "поддерживается только 16-битные символы, смиритесь".
Цитата Сообщение от nmcf Посмотреть сообщение
Прочитай, для чего они нужны.
И в третий раз рекомендую перечитать мой пост. Я не спрашивал для чего они нужны.
Но в большинстве случаев этот функционал не используется. Собственно, в большинстве случаев хватает printf/scanf, а там вообще не предполагается управление доступом. А ведь они реализованы через вызовы системных функций, то есть через те же WriteFile / ReadFile.
Да и сами настройки безопасности меняются реже, чем происходит чтение / запись. Было бы логично менять их только по необходимости, в отдельной функции.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.11.2018, 20:54
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
реализовывать поддержку всего юникода
Сам юникод не был реализован весь и сразу.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но в большинстве случаев этот функционал не используется
Для этих случаев есть параметры по умолчанию.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
13.11.2018, 10:41
Цитата Сообщение от nmcf Посмотреть сообщение
Сам юникод не был реализован весь и сразу.
В windows его включили довольно поздно, уже тогда было понятно что 2 байт на все не хватит. Не уверен, что были расписаны вообще все символы, но уж такие базовые вещи известны были.
Цитата Сообщение от nmcf Посмотреть сообщение
Для этих случаев есть параметры по умолчанию.
Не могли бы вы продемонстрировать на примере того же WriteFile как не указывать два последних аргумента?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2018, 10:41
Помогаю со студенческими работами здесь

Cannot convert from 'wchar_t' to 'const wchar_t *'
такой код, порылся в инете не помогло. ломать голову надоело может кто подскажет, буду благодарен. wchar_t * english = L&quot;abvgdee...

Error C2664: невозможно преобразовать из "wchar_t" в "const wchar_t *"
Вот так работает: wchar_t buf; Edit_GetText(hE, buf, sizeof(buf)); if(buf) { wchar_t b; _itow_s(wcscspn(buf, &amp;buf), b, 10); ...

CP886 в Multibyte (wchar_t) и BYTE в Multibyte (wchar_t)
Помогите разобраться с кодировками. Получаю из базы данных значения и при выводи их в EditControl все отлично, но если выводить данные в...

Открытие файла по пути
мне надо открыть файл который выбирается пользователем в диалоговом окне, но путь сохраняется без двойных слэшев как принято в С++ , что...

Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'|
Ругается на строку Log&lt;&lt;StripXML(__PRETTY_FUNCTION__)&lt;&lt;std::endl;. Функция такая: std::string StripXML ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType и SDL3_ttf из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru