Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C Visual Studio 2008中重命名文件_C_File Rename - Fatal编程技术网

在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…传入的。。。。只有一条斜线。有没有一种方法可以保证斜杠是一种特定的方式?或者用双斜杠代替单斜杠?