【发布时间】:2016-01-11 13:58:15
【问题描述】:
我必须用一些命令在 unix 中实现一个 shell
我想像 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。
【问题讨论】:
-
这个
fflush(stdin);是未定义的行为,它在windows上工作的原因并不重要,但在unix上它只是未定义的行为。这也是错误的scanf("%s", &mvFile_name1);。 move 和 rename 有什么区别?您想以物理方式移动它们吗? -
@iharob 它也适用于许多 Unices。并不意味着你应该使用它。
-
您是否在 mvFile_name2 中指定了完整的目标路径(类似于“/path/to/new/file”)?
-
C 标准非常清楚
fflush输入流:port70.net/~nsz/c/c11/n1570.html#7.21.5.2p2。无需关心为什么/是否有时会起作用。 -
在 Unix 中没有 move,只有重命名,因为文件不是你想的那样:文件在一个平坦的空间中,它们的名称只是字符串(粗略)给他们并存储到目录内容中。所以moving只是重命名,改名字或者改名字的地方(但是文件不动)。