#c #windows #qt
#c #Windows #qt
Вопрос:
Поскольку я использую Qt, я использую Qt-way для получения временной папки Windows. Это работает, но затем оказывается, что я не могу выполнить запись в эту папку.
Вот код :
const QStringList defaultFolders = QStandardPaths::standardLocations(QStandardPaths::TempLocation);
const QString tempFolder = defaultFolders.first();
const QString fileName = tempFolder "/testFile.txt";
ofstream file(fileName.toLocal8Bit(), fstream::out);
const bool ok = file.is_open();
const QString msg = ok ? "Success" : "Failure";
QMessageBox::warning(this, fileName, msg);
Что я пробовал до сих пор
- Используя жестко заданный путь с «\» вместо «/»
- Используя .toStdString().c_str() вместо «.toLocal8Bit()
Примечания
- В пути есть подчеркнутый символ.
- Пользователь Windows является администратором
- Я могу вручную создавать / удалять файлы во временной папке, но скомпилированное приложение не может.
- Я запускаю Windows 7 на виртуальной машине
- Это работает нормально, если я использую старые функции C (fopen / fwrite / fclose)
У кого-нибудь есть представление о том, что происходит не так?
Комментарии:
1. Возможно, использование
toStdWString()
вместоtoLocal8Bit()
будет работать лучше?std::filesystem::path filePath(fileName.toStdWString()); std::ofstream file(filePath);
Хотя я сам этого не пробовал.2. Временный путь на вашем компьютере может содержать неанглийские символы.
toLocal8Bit()
в этом случае может не сработать. Если вы не знакомы с кодировкой символов, просто используйте QFile и QTextStream вместо библиотеки std.3. @CongMa Вы правы, в пути есть неанглийские символы. Я уже указал это в разделе примечаний моего вопроса. Использование QFile / QTextStream, вероятно, решило бы мою проблему, но это не было целью моего вопроса.
Ответ №1:
Возможно, использование toStdWString()
вместо toLocal8Bit()
будет работать лучше?
std::filesystem::path filePath(fileName.toStdWString());
std::ofstream file(filePath);