2012-02-22 5 views
0

아래 코드가 있는데 어떤 이유로 인해 rename(..) 함수가 실패했습니다. 전체 경로를 제공하고 작업 디렉토리를 변경 한 다음 파일 이름을 제공하려고했습니다. 아래는 실패한 후자이고 errno13입니다. 모든 파일은이 Win32 콘솔 프로젝트의 Projects 폴더에 있습니다. 현재 작업 디렉토리가 무엇인지에 관계없이 단순히 파일 이름을 변경하는 것이 왜 그렇게 어려운지 이해할 수 없습니다.C Visual Studio 2008의 파일 이름 바꾸기

//fname_string* points to beginning of actual filename 
//filename contains entire output file path 
//file_ext* points to .csv portion 
//fname will get old filename 
fname_string = strrchr(filename, '\\'); 
if(fname_string == NULL) 
{ 
    fname_string = filename; //no dir supplied, so set it to filename 
} 
else 
{ 
    strncpy(fname, filename, fname_string - filename); 
    fname[fname_string-filename] = '\0'; 
    chdir(fname); 
    fname_string++; //now points to filename 
    read_success = errno; //this succeeds supposedly 
} 

strcpy(fname, fname_string); //save old file path 
sprintf(file_ext, "_%d.csv", append_esn); //append_esn = 1234 
read_success = rename(fname, fname_string); 
read_success = errno; //giving me 13 

편집 : 내가 바보 그리고 난이 '출력'파일을 '입력'파일을 닫는, 그리고했다. 그래서 참고하시기 바랍니다. 내가 닫힌 줄 알았던 이유는 출력 파일을 없애고 때로는 크기가 0 인 파일이 없기 때문입니다.

작업 디렉토리에있는 경우 이름 바꾸기는 전체 경로 또는 파일 이름 만 취할 수 있습니다 ... 말도 안되는 2 시간이 걸립니다 ... 위의 내용이 작동하거나 아래에서 언급 한 것과 같은 포인터가 있다고 가정합니다. 위 :

strcpy(fname, filename); //save old file path 
sprintf(file_ext, "_%d.csv", append_esn); 
read_success = rename(fname, filename); 
+0

'이름 바꾸기'직전에 파일 이름을 인쇄 해 보셨습니까? – cnicutar

+0

현재 디버깅 중이며, fname = log.csv 및 fname_string은 log_1234.csv입니다. 비슷한 질문은 여기 [link] (http://stackoverflow.com/questions/4512256/win32-api) -for-rename-a-file-in-c) – NickG

+0

rename()이 -1을 반환하면 ** 오직 ** errno를 점검해야합니다. – wildplasser

답변

0

위의 마지막 의견은이 질문/문제에 대한 답변입니다.

관련 문제