2014-10-14 3 views
1

QSettings와 INI의 섹션에서 파일 경로를 작성하고이 같은 그것을 시도하는 방법 :내가 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(); 

되지만 출력 파일 I 바로 볼 수

"[C % 3AUsers % 5CUsername % 5CDocuments % 5C222.txt]"섹션의 이름. 그리고 가장 중요한 점은 QSettings가 ini 파일을 읽을 때이 섹션을 찾을 수 없다는 것입니다. allKeys 변수는 항상 비어 있습니다.

무엇이 문제 일 수 있습니까? 감사. QSettings::Format 문서에서

+0

컴퓨터에서 코드가 잘 작동합니다. 예, C % 3AUsers % 5CUsername % 5CDocuments % 5C222.txt도 표시되지만 모든 키를 읽고 모든 설정을 읽을 수 있습니다. 비어 있지 않습니다. – Chernobyl

답변

0

내 실수였습니다. 내 질문에 코드를 약간 단순화됩니다. 쓰기 및 읽기 용 코드는 "save"및 "load"메서드에 있습니다. 나는 오히려 어리 석다. (문제는 "저장"및 "로드"방법의 입력 매개 변수 사이의 차이점이다. "저장"방법의 입력 문자열은 "C : \ Users \ Username \ Documents \ 222.txt"이고 "load"메서드는 "C : /Users/Username/Documents/222.txt"이므로 "load"메서드에서 설정을 읽으려고하면 QSettings가 섹션을 찾을 수 없습니다.

QSettings는 "\"와 "%"기호와 같은 특수 문자를 이스케이프 처리하고 "/"기호 QSettings는 중첩을 위해 사용하므로 "C : \ Users \ Username \ Documents \ 222.txt"와 같은 경로를 그대로 사용하기로 결정했습니다.

4

봐 :

QSettings 항상 특수 문자로 백 슬래시를 취급하고 읽기 또는 항목을 작성하기위한 어떤 API를 제공하지 않습니다.

+1

그는 "/"대신에 "/"를 사용할 수 있습니다. –

+1

@ N1ghtLight이 결과는 매우 좋지 않습니다. [C % 3A] Users \ Username \ Documents \ 222.txt \ att = ex' 그룹이 잘못 설정되었습니다. – Chernobyl

0

섹션 이름으로 QDir::fromNativeSeparators()을 사용하십시오. 다시 읽을 때 경로를 그대로 사용하거나 (모든 Qt 클래스에서 지원) QDir::toNativeSeparators()을 사용하여 Windows 스타일로 변환하십시오.

+0

QDir :: fromNativeSeparators()는 "\"을 "\"로 대체하고 @Chernobyl과 같은 결과를 얻습니다. – Alex