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 

EDIT: 私は馬鹿だと私は「出力」ファイル「入力」ファイルを閉じて、いませんでした。だから、FYI、ファイルを閉じてください!私はそれが閉じられていると思った理由は、私は出力ファイルをフラッシュし、時にはそれはゼロサイズのファイルを持っていないためです。

作業ディレクトリにある場合は、名前を変更すると完全なパスを取ることができます...ナンセンスの2時間がかかります.... 上記のように動作します。上記:

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

'rename'の直前にファイル名を印刷しましたか? – 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

私の最後のコメントはこの質問/問題に答えます。

関連する問題