【发布时间】:2016-07-17 22:01:16
【问题描述】:
我想为 move(mv) Unix 命令编写自己的代码。我对 C 语言完全陌生,显然不知道如何修复我的代码。如果两个输入都是文件名,我想执行重命名文件等操作。如果 dest_folder 是一个目录,我想将文件移动到该目录中。
但我无法修复特定问题的代码,因为我不太熟悉目录,尤其是 C。该程序需要 2 个输入源和目标,然后执行必要的功能。我显然可以重命名我的文件,但由于某种我不知道的原因,我无法将文件移动到特定文件夹?
在将文件移动到特定目录时需要帮助。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define SBUF 256
#define DBUF 256
int main(int ac, char *argv[])
{
DIR* dir_ptr; // the directory
struct dirent* direntp;
if( ac == 1 )
{
printf("Usage: %s MOVE\n", argv[0] );
exit(0);
}
if(ac>1 && ac<3)
{
printf("Error! few arguments provided " );
exit(0);
}
char src_folder[SBUF];
char dest_folder[DBUF];
strcpy(src_folder, argv[1]);
strcpy(dest_folder, argv[2]);
dir_ptr = opendir("."); //open directory
if ( dir_ptr == NULL )
{
perror( "." );
exit( 1 );
}
while( (direntp = readdir( dir_ptr )) != NULL )
{
if ( strcmp(direntp->d_name, dest_folder) !=0) //search file or directory
{
printf("found the file %s", dest_folder);
break;
}else
printf("not found");
break;
}
rename(src_folder, dest_folder);
closedir( dir_ptr );
return 0;
}
【问题讨论】:
-
我认为不需要
opendir/readdir/closedir。rename将为您检查文件是否存在。 -
您可能需要检查权限,以防它们在您的测试中发挥作用。您是否看到错误消息?你能指出你的代码中到底有什么不工作的地方吗?
-
@Elyasin 在我的终端上运行代码时,我没有收到任何错误消息。另外我不确定要指出什么,因为没有错误,但可能有一部分代码丢失并且不允许我移动或重命名文件,这是我无法弄清楚的?
-
@Elyasin 显然我想出了如何重命名在我的代码中工作正确的方法,但我仍然无法将文件移动到我不知道为什么的特定文件夹?我也更改了权限!
-
移动/重命名文件时,您只需要四件事:文件名、文件新名称、文件目录、文件新目录。我相信有了这四个,您可以轻松“移动”您的文件。那么权限是次要的