【发布时间】:2015-01-26 19:11:47
【问题描述】:
我是 C 的新手,我在使用程序将文件从一个硬盘传输到另一个硬盘时遇到了一些问题。将运行程序的 PC 没有任何类型的编译器,因此我想构建源路径和目标路径以更改的功能,而无需重新编译程序。就目前而言,在当前目录中有两个文本文件 - 一个带有源路径,另一个带有目标。程序从这些文件中读取行并使用这些各自的路径进行传输。
为了从我的角度简化事情,保持程序连续运行(因为这是必需的),我设置了一个 1 秒的循环,而不是使用系统线程。
我认为问题在于使用字符串变量作为系统命令中的目录路径 - 因为如果我在此命令中对路径进行硬编码,则传输成功。在当前安排中,我收到错误“文件名、目录名或卷标语法不正确”。在我的程序中。有人有什么建议吗?我应该使用 sprintf 将文本文件中的一行转换为字符串吗?
#include <stdio.h>
#include <time.h>
#include <string.h>
void delay(int seconds);
int main()
{
int x=1;
chdir("C:\\Users\\jw\\Documents\\");
FILE *file_src;
FILE *file_dst;
file_src=fopen("source_dir.txt","r");
file_dst=fopen("dest_dir.txt","r");
char message[150][150],buffer[150];
char* source_directory;
char* destination_directory;
fgets(buffer,150,file_src);
strcpy(message[1],buffer);
sprintf(data,"%s",message[1]);
source_directory=message[1];
fgets(buffer,150,file_dst);
strcpy(message[2],buffer);
sprintf(data2,"%s",message[2]);
destination_directory=message[2];
printf("source folder: %s \n",message[1]);
printf("destination folder: %s \n",message[2]);
for(x=1;x=1;x=1)
{
system("move *%s *%s",source_directory,destination_directory);
delay(1);
}
printf("/n")
return(0);
}
void delay(int seconds)
{
long pause;
clock_t now,then;
pause = seconds*(CLOCKS_PER_SEC);
now = then = clock();
while( (now-then) < pause )
now = clock();
}
【问题讨论】:
-
你知道数组的索引是从
0到N-1吗? -
如果您正在编写程序来移动文件,那么使用
system()有什么意义呢?编写脚本并避免麻烦。 -
什么是
data和data2?此外,如果您想要无限循环,请使用for(;;)。message[0]未使用。/n!=换行符。换行==\n -
为什么你用
fgets读入一个缓冲区,用strcpy移动到另一个缓冲区,然后sprintf把字符串放到第三个缓冲区?为什么不首先在任何你想要的地方阅读它? -
老实说,这个问题的最佳答案应该是,“如果你想编写 C 代码,你必须学习 C。”我什至无法想象什么样的思维过程会导致一个人写
for(x=1;x=1;x=1)。
标签: c printf file-transfer