![](/img/trans.png)
[英]Copy a file from sdcard location to another location in c language in Android
[英]Move a file from a location to another in UNIX
我必须使用一些命令在UNIX中实现外壳
我想将多个文件移动到mv -t一样的文件夹位置。
问题在于重命名功能,仅重命名文件就不会移动该文件。
void mv_t()
{
int mutat;
char mvFile_name1[256];
char mvFile_name2[256];
int nr=0;
printf("How many files you want to move: ");
fflush(stdin);
scanf("%d", &nr);
printf("The file where you move: ");
fflush(stdin);
scanf("%s", &mvFile_name1);
for(i=0; i<nr; i++)
{
printf("The file you want to move: ");
fflush(stdin);
scanf("%s", &mvFile_name2);
mutat = rename(mvFile_name1, mvFile_name2);
if(mutat != 0)
perror("Error");
}
}
这就是我写的 在“ for”中,他使用mvFile_name1并将其重命名为mvFile_name2,然后他没有该文件的先前名称。 但是,如果这行得通,仍然不要移动mvFile_name1中的文件,他只是将它们重命名为mvFile_name1。
您的args以错误的顺序rename()
,将它们交换。
他们是:
rename(oldpath, newpath);
另外,您还需要构造新路径,方法是剥离mvFile_name2中的任何路径(/之前的部分),然后将其替换为mvFile_name1。
另外,您还应该验证mvFile_name1是一个目录。
因此,如果该人输入:
1
/tmp
/some/place/this.txt
那么您应该这样做:
rename(/some/place/this.txt, /tmp/this.txt);
同样,如果旧路径和新路径位于不同的磁盘上,这将失败,但是可能比您要处理的更为复杂。
另外,@ iharob所说的一切。
即使您的代码有效,它也存在一些问题
fflush()
函数的行为未针对c标准中的输入流进行定义,仅针对输出进行了定义。 因此, fflush(stdin)
是未定义的行为。
您必须检查scanf()
的返回值,否则可能会导致专门针对"%d"
说明符的问题。
这个scanf("%s", &mvFile_name1);
是错误的,因为mvFile_name1
已经是指向数组第一个元素的指针。 传递它的地址是错误的,因为结果指针的类型错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.