我试图运行将文本从一个文件复制到另一个文件的程序
im trying to run a program that copy the text from one file to the other
im试图编写一个程序,该程序获取两个文本文件,并将文本从一个文件复制到另一个文件。该函数似乎正在工作,但它更改了我写入的文件,而不是文本文件。
请帮助!!!!
int main(int argc, char *argv[]) {
printf("Hello World!n");
char* file1 = argv[1];
char* file2 = argv[2];
char buffer1[SIZE+1];
//char buffer2[SIZE+1];
int fd1, fd2;
int run = 1;
int run2;
fd1 = open(file1, O_RDONLY);
if(fd1 < 0){
perror("after open "); // checks if the file was open ok
exit(-1);
}
fd2 = open(file2, O_RDWR );
if(fd2 < 0){
perror("after open "); // checks if the file was open ok
exit(-1);
}
while(run != 0){
run = read(fd1, buffer1, SIZE);
run2 = write(fd2, buffer1, SIZE);
printf("run 2: %d", run2);
}
close(fd1);
close(fd2);
return 1;
}
可能是因为
fd2 = open(file2, O_RDONLY);
仅读取文件 -> fd2
您的程序无法处理读取数量读取的情况小于缓冲区大小:
while(run != 0){
run = read(fd1, buffer1, SIZE);
run2 = write(fd2, buffer1, SIZE);
printf("run 2: %d", run2);
}
如果读取的金额小于大小,则将写垃圾到第二个文件。
为什么使用低级文件I/O?
这可以使用C语言函数高水平完成:
FILE * input;
FILE * output;
input = fopen("input_file.bin", "rb");
output = fopen("output_file.bin", "wb");
while (!feof(input))
{
int quantity = fread(&buffer1[0], SIZE, 1, input);
int bytes_written = fwrite(&buffer1[0], quantity, 1, output);
}
在上面的示例中,编写的字节数是读取的字节数。如果字节读取的数量小于 SIZE
,则它将写入读取到输出文件的字节量化,而不再是。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 挂起和取消挂起一个文件DLL
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何打开并写入一个名称取自C++中字符串的文件
- 构建一个由C和C++文件组成的库
- c++多进程编写一个唯一的文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何将class.cpp和class.hpp编译为一个.o文件
- 写入文件会产生一个空文件或根本没有文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
- 在C++中一次读取一个文件一个int
- 输入/输出文件(一个字母的大写)
- 如何使用两个预编译的头文件.一个用于托管代码,另一个用于非托管代码.xxx.PCH不是一个有效的预编译头文件