在C Visual Studio 2008中重命名文件
我有下面的代码,由于某种原因,在C Visual Studio 2008中重命名文件,c,file-rename,C,File Rename,我有下面的代码,由于某种原因,rename(…)函数失败。我尝试过提供完整路径,以及更改工作目录,然后只提供文件名。下面是后一个失败的错误,errno是13。所有文件都在此win32 console项目的“我的项目”文件夹中。我不明白为什么不管当前的工作目录是什么,都很难简单地更改文件名 //fname_string* points to beginning of actual filename //filename contains entire output file path //file
rename(…)
函数失败。我尝试过提供完整路径,以及更改工作目录,然后只提供文件名。下面是后一个失败的错误,errno
是13
。所有文件都在此win32 console项目的“我的项目”文件夹中。我不明白为什么不管当前的工作目录是什么,都很难简单地更改文件名
//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
编辑:
我很笨,我关闭的是“输入”文件,而不是“输出”文件。仅供参考,最好关闭文件!我之所以认为它是关闭的,是因为我刷新了输出文件,有时它没有零大小的文件
所以重命名可以是一个完整的路径,或者只是文件名,如果它在工作目录中的话…有两个小时的废话。。。。
因此,上述方法可行,或者假设上述指针相同,只需执行以下操作:
strcpy( fname, filename ); //save old file path
sprintf( file_ext, "_%d.csv", append_esn );
read_success = rename( fname, filename );
我在上面的最后一条评论回答了这个问题。您是否在
重命名
之前尝试打印文件名?我当前正在调试,当鼠标悬停在文件名上时,fname=log.csv,fname_字符串是log_1234.csv。类似的问题在这里,我可能会查看。如果rename()返回-1,您应该只检查errno,我确实打开了它,但我调用了fclose(input),这是我正在更改的文件…如果有帮助的话。如果我手动将文件复制到c驱动器并将chdir复制到(“c:\\”),我就能够使它工作。这让我相信这与我在字符串中的斜杠有关。我相信它们目前只是作为C:\Docume…传入的。。。。只有一条斜线。有没有一种方法可以保证斜杠是一种特定的方式?或者用双斜杠代替单斜杠?