Как написать filepath в разделе in i с помощью QSettings
Мне нужно использовать filepath в качестве имени раздела в INI-файле, и я пытаюсь сделать это так:
QSettings ini(iniPath, QSettings::IniFormat);
ini.beginGroup("C:\\Users\\Username\\Documents\\222.txt");
ini.setValue(attributeName, attributeValue);
...
ini.endGroup();
Затем я пытаюсь прочитать значения из этого раздела:
QSettings ini(iniPath, QSettings::IniFormat);
ini.beginGroup("C:\\Users\\Username\\Documents\\222.txt");
auto allKeys = ini.allKeys();
for (auto& key: allKeys)
{
QString val = ini.value(key);
...
}
ini.endGroup();
Но в выходном файле я вижу только "[C%3AUsers%5CUsername%5CDocuments%5C222.txt]" в качестве имени раздела. И самое главное, что QSettings не может найти этот раздел, когда читает ini-файл, переменная allKeys всегда пуста.
В чем может быть проблема? Благодарю.
3 ответа
Это была моя ошибка. Код в моем вопросе немного упрощен. Код для написания и чтения находится в методах "сохранить" и "загрузить". Я чувствую себя довольно глупо:(Проблема была в разнице между входными параметрами в методах "save" и "load". В методе "save" строка ввода была "C:\Users\Username\Documents\222.txt" и в Метод "загрузки" это был "C:/Users/Username/Documents/222.txt", поэтому, когда я попытался прочитать настройки в методе "загрузки", QSettings не смог найти раздел.
Насколько я понимаю, QSettings экранирует специальные символы, такие как "\" с символом "%". И символ "/" QSettings использует для создания вложений. Поэтому я решил использовать пути типа "C: \ Users \ Имя пользователя \ Documents \ 222.txt" как есть. Работает нормально. Спасибо вам всем.
Посмотрите на документацию QSettings::Format:
QSettings всегда обрабатывает обратную косую черту как специальный символ и не предоставляет API для чтения или записи таких записей.
Используйте QDir::fromNativeSeparators() для имени раздела. Когда вы читаете обратно, просто используйте путь как есть (все классы Qt поддерживают его) или преобразуйте его в стиль Windows с помощью QDir:: toNativeSeparators ().