2012-07-24 3 views
-1

tmpfnam 함수를 호출하여 임시 파일 이름을 얻고 작성을 위해 파일을 만드는 데 사용하는 C++ 프로그램에서 임시 파일을 만들려고하지만 코드가 임시 파일을 만들 수 없습니다. 그러나 tmpfnam의 임시 이름을 사용하는 대신 사용자 제공 파일 이름이나 문자열 상수를 사용할 때 파일 만들기가 완벽하게 작동합니다.tmpfnam을 사용하여 C++에서 임시 파일을 만들 수 없습니다.

std::tmpnam(fname); //does not work 
std::fstream f(fname,std::ios::out); 

char* fname = "myfile.txt"; //works 
std::fstream f(fname,std::ios::out); 

가 나는 경우 2 파일이 원본 파일과 같은 디렉토리에 생성되고 있음을 확인할 수 있지만 경우 1에 나뿐만 아니라 여전히 관리자 권한 아래에있는 프로그램을 실행 시도 예를 들면 다음과 같습니다 불운 . 왜 그렇게 생각하세요?

+0

'tmpnam'에 무엇을 전달하고 있습니까? 충분히 큰가요? – cnicutar

+1

나는 당신이 실행 파일과 같은 디렉토리에 쓸 수 있다는 것이 놀랍다. 실행 파일은 보호 된 위치에 있으면 안됩니다. –

+0

@cnicutar'fname'은'L_tmpnam' 크기로 선언되었으므로 잘 동작합니다. – adi

답변

1

시도해 보셨습니까? this 방법을 사용하셨습니까?

char fname[L_tmpnam]; 
if (std::tmpnam(fname)) { 
    std::fstream f(fname,std::ios::out); 
    // ... 
} 

도움이 되길 바랍니다.

+0

이 방법을 시도하고 std :: tmpnam NULL을 반환합니다. 그렇다면 어떻게 임시 파일을 만들 수 있습니까? – adi

+0

@adi 옛날 C 대기'tempnam' ([Open Group] (http://pubs.opengroup.org/onlinepubs/007904875/functions/tempnam.html 참조) 또는 [Microsoft] (http : // msdn.microsoft.com/en-us/library/hs3e7355(v=vs.110).aspx)) –

+0

Jeffrey, 고맙습니다.하지만'tmpfnam'은 임시 파일 이름을 '\'앞에 붙이고 창을 반환합니다. 파일 이름에 '\'를 허용하지 않으면 내 fstream 객체가 파일을 만들지 못했습니다. – adi