Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 20
1

Конвертация в LPCSTR

28.04.2016, 17:39. Показов 1664. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!

Для работы OpenFile (handle file) необходимо указать расположение файла в виде параметра с типом LPCSTR. Путь к файлу у меня представлен переменной QString. В конвертации QString в LPCSTR и возникла проблема. Если содержимое строки в виде текста вписываешь в OpenFile, то всё работает. Однако конвертировать напрямую в LPCSTR не выходит.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    // Это содержимое переменной image, так всё работает:
    //LPCSTR imageLPC = "C:/Qt/projects/my_image_GUI/photo/2016.04.18-1.jpg";
 
    // Это мои попытки преобразования:
    //LPCSTR imageLPC = image.toStdString().c_str();
    //LPCSTR imageLPC = (LPCSTR)image.toStdWString().c_str();
    //LPCSTR imageLPC = (LPCSTR)image.toStdString().c_str();
    //LPCSTR imageLPC = (LPCSTR)image.toLocal8Bit().constData();
    //LPCSTR imageLPC = (LPCSTR)image.toUtf8();
    LPCSTR imageLPC = (LPCSTR)image.toLocal8Bit();
 
    HANDLE hFile = (HANDLE)OpenFile(imageLPC, &os, OF_CREATE);
    // Так работает:
    //HANDLE hFile = (HANDLE)OpenFile("C:/Qt/projects/my_image_GUI/photo/2016.04.18-1.jpg", &os, OF_CREATE);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2016, 17:39
Ответы с готовыми решениями:

Конвертация BYTE* в LPCSTR
всем привет, делаю имплементацию конвертации массива байтов в строку. LPCSTR byte2ch(BYTE* data,...

C2664: "BOOL PlaySoundA (LPCSTR,HMODULE,DWORD)": невозможно преобразовать аргумент 1 из unsigned char в LPCSTR
Есть массив, который я пытаюсь проиграть через PlaySoundA https://pastebin.com/dqCvsmmB Пытаюсь...

int->LPCSTR && char->LPCSTR
Подскажите как преобразовать int в LPCTSTR и char в LPCTSTR?

LPCSTR в string
Функция f отвечает за то, чтобы преобразовать strHash из string в LPCSTR, но почему-то при записи в...

7
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
28.04.2016, 19:03 2
C++ (Qt)
1
2
QByteArray imageLPC = image.toLocal8Bit();
HANDLE hFile = OpenFile(imageLPC.constData(), &os, OF_CREATE);
А лучше используй CreateFile() и image.utf16().
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 20
28.04.2016, 21:18  [ТС] 3
C++ (Qt)
1
2
3
C:\Qt\projects\my_image_GUI\mainwindow.cpp:62: error: invalid conversion from 'HFILE {aka int}' to 'HANDLE {aka void*}' [-fpermissive]
     HANDLE hFile = OpenFile(imageLPC.constData(), &os, OF_CREATE);
                                                                 ^
Добавлено через 14 минут
Мне необходимо отредактировать атрибуты файла (время создания, изменения), насколько понимаю, CreateFile() мне не подойдёт.
Как использовать *.utf16()? У меня в свойствах переменной image такого нет. Какую-то библиотеку подключить?
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
28.04.2016, 21:22 4
Функция возвращает HFILE, а не HANDLE. Попробуй (HANDLE) перед функцией.
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 20
28.04.2016, 21:24  [ТС] 5
C++ (Qt)
1
2
3
C:\Qt\projects\my_image_GUI\mainwindow.cpp:62: error: invalid conversion from 'HANDLE {aka void*}' to 'LPCSTR {aka const char*}' [-fpermissive]
     HANDLE hFile = OpenFile((HANDLE)imageLPC.constData(), &os, OF_CREATE);
                                                                         ^
C++ (Qt)
1
2
3
C:\Qt\projects\yota_image_GUI\mainwindow.cpp:62: error: invalid conversion from 'HFILE {aka int}' to 'HANDLE {aka void*}' [-fpermissive]
     HANDLE hFile = OpenFile((HANDLE)imageLPC.constData(), &os, OF_CREATE);
                                                                         ^
Не помогает)

Сама строка:
C++ (Qt)
1
 HANDLE hFile = OpenFile((HANDLE)imageLPC.constData(), &os, OF_CREATE);
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
28.04.2016, 21:25 6
Лучший ответ Сообщение было отмечено menfor как решение

Решение

OpenFile() - устаревшая функция, сейчас везде CreateFile() должна быть.
Для редактирования атрибутов тебе не подойдёт ни та, ни другая.
utf16() - это функция QString, у тебя же image - QString?

Добавлено через 37 секунд
Да не так.
C++
1
(HANDLE)OpenFile(imageLPC.constData(), &os, OF_CREATE)
1
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 20
29.04.2016, 09:25  [ТС] 7
Ну я файл открываю через OpenFile(), атрибуты изменяю через SetFileTime().
Спасибо за помощь, всё работает!

Добавлено через 11 часов 47 минут
Возможно, ты советовал мне использовать CreateFile() из-за того, что у меня в OpenFile() был задан атрибут OF_CREATE. Это было не правильно, сейчас переделал на OF_WRITE.
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
29.04.2016, 09:34 8
Сама по себе OpenFile() - устаревшая функция. Все новые программы должны использовать CreateFile().
0
29.04.2016, 09:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2016, 09:34
Помогаю со студенческими работами здесь

ReadProcessMemory LPCSTR
Здравствуйте! Почему-то при выводе считанной строки программа падает (Необработанное исключение,...

String to LPCSTR
проблема такая (vc++ 2005) error C2664: 'CreateFileA' : cannot convert parameter 1 from...

String^ -> LPCSTR
Столкнулся с весьма интересной проблемой, кодингом на c++ занимаюсь редко, а следовательно на...

Перевод lpcstr to qstring
Здравствуйте, я получаю дескриптор проецируемого объекта: LPCTSTR pBuf; pBuf =...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru