2010-06-24 3 views
0

xml 파일을 열고 수정 한 다음 다시 닫아야하는 응용 프로그램이 있습니다. 오류 코드 (13)를받지 않고 ...실행 파일에서 파일 수정 - XP에서는 권한이 거부 됨 (Vista는 아님)

errno_t _wfopen_s(&inStream, m_fileName, L"r+, ccs = UTF-8"); 

: 나는 Windows Vista를 실행하는 노트북에 코드를 테스트 할 때, 그것은 완벽하게 작동하지만 윈도우 XP에서 난 읽기/쓰기 액세스를 위해 파일을 열 수 없습니다 , "Permission denied"(읽기 전용 액세스를 지정하기 위해 "r"대신 "r"을 선택하면 아무 문제없이 파일이 열리지 만) 파일에 대한 사용 권한은 모두 내가 알 수있는 한 적절하게 설정됩니다 , 파일 어려움없이 GUI에서 열고 수정할 수 있습니다.

가능성이 원인이 될 수 무엇

? 어떤 제안을 환영 할 것이다.

+0

두 OS 모두에있는 파일은 어디에 있습니까? 관리자 자격 증명으로 프로그램을 실행하려고 시도 했습니까? – ereOn

+0

Vista에서는 "내 문서"에 있습니다. XP에서는 "내 문서"와 "C : \ Program Files"를 모두 시도했지만 각 경우마다 동작이 동일합니다. –

답변

0

W ell, r +로 파일에 대한 쓰기 권한을 요청할 것입니다. 사용자 계정이 실제로 폴더에 쓰기 권한이 있음을 세 번 점검하십시오.

하지만 이미 확인한 것 같습니다. 다음 고려 사항은 공유입니다. fopen() 함수는 현대 멀티 태스킹 운영 체제에서는 매우 부적합합니다. 모든 프로세스가 열린 파일에 액세스하여 읽고 쓸 수 있습니다. 특히 쓰기 공유는 프로세스가 파일에 대한 액세스를 협상하지 않는 경우에만 가비지를 생성 할 수 있습니다.

그래서 Microsoft CRT에 fopen_s()가있어 쓰기 공유가 거부되었습니다. 그것은 당신이 그것을 허용하고 싶다는 것은 매우 드뭅니다. "r"을 패스하면 읽기 공유가 허용됩니다. "r +"를 넘길 때 공유가 허용되지 않습니다. 다른 프로세스가 이미 파일을 열어 읽었을 경우 실패 할 수 있습니다.

다른 프로세스를 찾아야합니다. SysInternals 'Handle 유틸리티를 사용하면 찾을 수 있습니다. 또한 자신의 프로그램 일 수도 있다고 생각하십시오.

일반적으로 공유 제어를 담당하고 대신 _wfsopen() 함수를 사용하십시오. 아무 것도 필요하지 않기 때문에 보안 버전이 없다는 점에 유의하십시오.

+0

프로그램의 훨씬 이전에 IXMLReader에 의해 파일이 열리 며 초기화 중에 해당 내용을 읽을 수 있습니다. XP가 제대로 닫히지 않았을 가능성이 있는지 궁금합니다. 비스타는 그렇습니다. 나는 이것을 조사 할 것이다 ... –

+0

좋은 리드와 같은 소리. 참조 횟수를보십시오. –

+0

예, 그게 전부입니다. IXMLReader를 사용하여 파일을 처음 읽는 것에 대한 코드를 면밀히 살펴본 결과 명시 적으로 닫히지 않았 음을 알았습니다. 코드가 닫혀 있는지 확인하기 위해 코드를 변경하면 응용 프로그램이 작동했습니다. 분명히 여기에 XP와 Vista 사이의 동작에는 iXMLReader를 구현하는 방식에 약간의 차이가 있습니다. 아마도 XP 동작이 더 정확할 것입니다. 비스타가 더 수용적이고, 이것은 나에게 보안에 대한 잘못된 인식을 주었다! 어쨌든 올바른 방향으로 나를 놓은 포인터에 감사드립니다. 스티븐. –

관련 문제