gpt4 book ai didi

C编程-将文件复制到另一个

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:45 25 4
gpt4 key购买 nike

我实现了以下功能

int copy_files(char *source, char *destination)
{
FILE *in_fd, *out_fd;

char *buf;
char buffer[512];

time_t t;
struct tm *td;

long file_size;
int result;
int value;

int status = STATUS_ERROR;

/* Open file for both reading and writing */
in_fd = fopen(source, "w+"); //
if(in_fd == NULL)
{
fputs ("File error",stderr);
exit (1);
}
else
{
printf("writing in file...\n");

strcpy(buffer, "Test writing in USB Key File \n");
fprintf(in_fd, buffer);
printf("%s\n",buffer);
t = time(NULL);
td = gmtime((const time_t *)&t);
sprintf(buffer, "Date %02d/%02d/%02d Time %02d:%02d:%02d\n",
td->tm_mday, td->tm_mon + 1, td->tm_year + 1900,
td->tm_hour, td->tm_min, td->tm_sec);
fprintf(in_fd, buffer);
printf("%s\n",buffer);
printf("Writing OK\n");
}

out_fd = fopen(destination,"w+");
if(out_fd == NULL)
{
fputs ("File error",stderr);
exit (1);
}
else
{
// obtain file size:
fseek (in_fd , 0 , SEEK_END);
file_size = ftell (in_fd);
rewind (in_fd);

// allocate memory to contain the whole file:
buf = (char*) malloc (sizeof(char)*file_size);

while (!feof(in_fd))
{
/* Read data */
fread(buf, 1, (sizeof buf), in_fd);
printf("%s", buf);
}

/* Write data */
fwrite(buf, 1, (sizeof buf), out_fd);
}
fclose(in_fd);
fclose(out_fd);
return STATUS_OK;
}

通过这个函数,我想创建一个文件,用两行填充它并将整个包含复制到另一个文件。

但是我不明白为什么:

  1. 目标文件的创建与源文件相反。
  2. printf 显示:

    写入文件...测试写入USB Key文件日期 01/01/1970 时间 00:45:46书写正常Testh�v wrih�vtingh�v in h�vUSB h�vKey h�vFileh�vDah��vte 0h��v1/01h��v/197h��v0 Tih��vme 0h��v0:45h��v:46h��v:46

如何解决问题?

编辑:

关于第一个问题我不明白为什么会出现下面的代码:

strcat(temp_dest, direntp->d_name);
printf("after strcat temp_dest=%s\n", temp_dest);
strcat(temp_src, direntp->d_name);
printf("after strcat temp_src=%s\n", temp_src);
printf("destination:%s\n",temp_dest);
copy_files(temp_src,temp_dest);

返回:

after strcat temp_dest=/tmp/usb/test10
after strcat temp_src=/media/sda1/test10
destination:10

为什么是 10? :/

最佳答案

更正您的 fread()

因为您已经知道文件大小
无需循环,一次调用fread读取file_size字节就足够了。

else                                                                        
{
// obtain file size:
fseek (in_fd , 0 , SEEK_END);
file_size = ftell (in_fd);
rewind (in_fd);

// allocate memory to contain the whole file:
buf = malloc (file_size);

/* Read file_size no of bytes */
fread(buf, 1, file_size, in_fd);
buf[file_size -1] = 0;
printf("File content after Reading :[%s]", buf);

/* Write data */
fwrite(buf, 1, file_size, out_fd);
}

代码中的其他更正。
fprintf 中缺少 %s(第二个参数)。

...
else
{
printf("writing in file...\n");

strcpy(buffer, "Test writing in USB Key File \n");
fprintf(in_fd, "%s", buffer);
...

fprintf(in_fd, "%s", buffer);
printf("Writing OK\n");
}

关于C编程-将文件复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27542982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com