0
我有下面的代码,出于某种原因,rename(..)
函数失败。我已经尝试提供完整路径,以及更改工作目录,然后提供只是文件名。下面是后者失败,errno
是13
。所有文件都在我的这个win32控制台项目的Projects文件夹中。我不明白为什么简单地改变文件名是如此困难,无论当前的工作目录是什么。在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
编辑: 我是哑巴,我被关闭“输入”文件,而不是“产出”的文件。所以FYI,文件最好关闭!我认为它被关闭的原因是因为我刷新了输出文件,有时它没有一个零大小的文件。
所以重命名可以采取一个完整的路径或只是文件名,如果它在工作目录中...有两个小时的废话.... 因此,上述将工作,或只是做下面假设提供相同的指针以上:
strcpy(fname, filename); //save old file path
sprintf(file_ext, "_%d.csv", append_esn);
read_success = rename(fname, filename);
您是否尝试在'rename'之前打印文件名? – cnicutar 2012-02-22 21:41:39
我正在调试,当它们悬停在它们上面时,fname = log.csv和fname_string是log_1234.csv 类似的问题在这里[link](http://stackoverflow.com/questions/4512256/win32-api -for-rename-a-file-in-c)我可以查看 – NickG 2012-02-22 21:43:52
如果rename()返回-1,则只应该**检查errno。 – wildplasser 2012-02-22 21:48:38