2011-01-09 4 views
5

에 작성/쓰기 할 수 없습니다. 설치된 디렉토리 (C : \ Program Files ...)에 쓰기를 요구하는 Qt 프로그램 (처음에는 Windows 7의 경우 4.7)을 작성하고 있습니다. "보호 된"위치 (프로그램 파일, C : \ etc)에 쓸 때 파일이 생성되지 않습니다. 그러나 QFile 내게 어떤 오류 코드를 제공하지 않습니다. (error()는 0을 반환하므로 정상적으로 작동합니다).Qt는 C :

내가 사용하고있는 코드 스 니핏이 작동하지 않습니다. 나는 그 프로그램의 마지막 부분에서 파일을 닫을 것이다.

QApplication a (argc, argv);

// Setting plugin paths. 
QStringList paths = QCoreApplication::libraryPaths(); 
paths.append(QCoreApplication::applicationDirPath()); 
QCoreApplication::setLibraryPaths(paths); 



// Debug file. 
QString path = QCoreApplication::applicationDirPath() + "/debug.dat"; 
//QFile debugFile(QCoreApplication::applicationDirPath() + "/debug.dat"); 
QFile debugFile("C:/debug.txt"); 
qDebug() << debugFile.error(); 
debugFile.setPermissions(QFile::WriteUser | QFile::WriteGroup | QFile::WriteOwner | QFile::WriteOther); 
debugFile.open(QFile::WriteOnly); 
QTextStream debugStream(&debugFile); 

// Processing the arguments. 
debugStream << QString("Processing Arguments\n"); 

누구든지이 문제를 해결하는 방법에 대한 조언이 있습니까? 도움을

감사합니다,

JEC 매니페스트 파일을 추가


이 문제를 해결하기 위해 내가 선택한 길이다.

도움 주셔서 감사합니다.

+2

"그러나 QFile에서 오류 코드를 제공하지 않습니다."debugFile.open()의 반환 값을 확인해야합니다. –

답변

7

파일이 해당 사용자의 VirtualStore에서 생성되지 않았는지 확인 했습니까? 응용 프로그램 및 서비스 로그 -> Microsoft -> Windows -> UacFileVirtualization -> Operational에서 이벤트 뷰어를 확인하십시오. 이벤트 ID가 5000 인 항목이 표시되면 FileCreateVirtualExclude 이벤트가 발생했습니다.

%USERPROFILE%\AppData\Local\VirtualStore에서 파일이 생성되지 않았는지 확인하십시오. 이 그랬다면, 당신은 필요한 권한을 요청하는 매니페스트를 포함해야합니다 (즉, 가상화를 해제.) 자세한 내용은

, New UAC Technologies for Windows Vista를 참조 (아래로 스크롤 및 가상화를 찾습니다.)

+0

당신은 틀림없이 틀렸어. 내 파일은 가상 저장소에 저장되었습니다. (대부분 어쨌든 대부분의 경우, 어떤 이유로 든 실제로 저장되지 않은 하위 폴더가 있습니다.) 내 프로그램이 이제 거의 실행되도록 매니페스트를 추가했습니다. 감사. – jecjackal

2

Windows Vista +에서 이러한 폴더에 쓸 수있는 충분한 사용자 액세스 권한 (예 : "관리자 권한으로 실행")을 획득해야합니다. 관리자로 앱을 시작하거나 WinAPI를 호출하여 관리자 권한을 요청하십시오.

+0

AFAIK 이미 실행중인 프로세스에 대한 관리자 권한을 요청할 수는 없지만 이러한 권한이 필요한 작업을 수행하기 위해 다른 프로세스를 시작해야합니다. –

2

Qfile을주는 될 수있다 오류 코드가 있지만 확인하지 못했습니다.

당신은 뭔가 더 같이해야한다 : 당신은 QFile::error의 반환 값을 확인했지만, 단지 전에이 open를 호출

if (!debugFile.open(QFile::WriteOnly)) { 
    qWarning() << "Failed to open" << debugFile.fileName() << "for write:" << debugFile.errorString(); 
} 

- 당신은 열린 시도 후 을 확인해야합니다.

+0

와우, 네가 옳았다. 파일을 열기 전에 오류 코드를 확인하고있었습니다. 그럼 내가 코딩을 늦게 끝낼 때 무슨 일이 일어나는가. 감사. – jecjackal