문제

7-Zip을 사용하여 파일을 압축하려고 합니다. system() Windows XP 시스템에서 C++로 작동합니다.나는 시도했다:

(system()이 수신한 형식으로 형식화됨)

"C:\Program Files\7-Zip\7z.exe" a -tzip "bleh.zip" "addedFile.txt"

오류를 뱉어낸 것

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

몇 가지 유사한 대안을 시도했지만 아직 해결책을 찾지 못했습니다.

사용자가 7-Zip을 설치하면 제대로 작동할 수 있도록 설치 디렉터리에서 바로 실행하려고 합니다.이는 사내 유틸리티 애플리케이션용입니다.

편집하다:요청한 대로 실제 코드 줄은 다음과 같습니다.

std::string systemString = "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip \"" + outDir + projectName + ".zip" + "\" \"";
//...
std::string finalSystemString = systemString + *i + "\"";
system( finalSystemString.c_str() );

*i 추가되는 특정 파일에 대한 반복자입니다.

도움이 되었습니까?

해결책

첫 번째 인수 주위에 인용문을 제거하는 것 같습니다. 추가 인용문으로 플레이 하여이 문제를 해결하려고 시도하거나 Win32 API를 사용하여 7z.exe의 MS-DOS 호환 짧은 경로 이름을 얻을 수 있습니다. GetShortPathName

짧은 경로에는 그 안에 공간이 없으며 "C : progra ~ 1 7-zip 7z.exe"와 같은 것입니다.

다른 팁

공백을 탈출하려고 시도 했습니까? 즉 "C : Program Files 7-Zip 7z.exe"? System ()의 세부 사항을 알지 못하지만 효과가있을 수 있습니다.

또 다른 접근 방식은 다음을 사용하는 것입니다. 프로세스 생성 Windows API에서 함수를 사용합니다.설명서에 따르면 "C:\Program Files"의 공백을 처리할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top