0
私は以下のコードを持っていて何らかの理由でrename(..)
機能が失敗しています。私は完全なパスを提供し、作業ディレクトリを変更して、ちょうどファイル名を提供してみました。以下は失敗した後者で、errno
は13
です。すべてのファイルは、この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);
'rename'の直前にファイル名を印刷しましたか? – cnicutar
私は現在デバッグ中です。それらの上にマウスを置くと、fname = log.csvとfname_stringはlog_1234.csvになります。 同様の質問はこちら[link](http://stackoverflow.com/questions/4512256/win32-api) -for-rename-a-file-in-c)を参照してください。 – NickG
rename()が-1を返す場合は** ** errnoをチェックするだけです。 – wildplasser