2010-12-16 67 views
1

我卡住/努力解决问题我尝试在C(Linux)使用API​​调用(仅)通过命令行将多个输入文件复制到一个输出文件。我已经在互联网上寻找答案,但似乎没有解决。 我的程序允许我通过命令行指定多个输入文件和一个输出文件。例如:C:复制多个文件到一个

./archiver file1.txt file2 file3 file4 outputfile 

予读取使用argc/argv这些参数。由于某种原因,当我做ls -l时,./archiveroutputfile具有相同的字节数,因此意味着我的输入文件都没有被复制到我的输出文件中,无论是否在内存中(当我做cat outputfile时显示了其中一堆)

我的输入文件中的内容都不在我的输出文件中。

请你能帮助我,因为在那些“”我不知道该怎么办我已经尝试阅读malloc()等,但我不知道如何实现,或者如果那甚至在这里相关。

任何帮助表示赞赏,谢谢你的时间。

file_desc_in = open(argv[i],O_RDONLY,0);  
//NEED a loop to copy multiple files in... 
while (!eof) { 
    bytes_read = read(file_desc_in, &buffer, sizeof(buffersize)); 

    if (bytes_read > 1) 
     bytes_written = write(file_desc_out, &i, bytes_read); 
    else { 
     eof=1; 
    } 

我没有包括错误,但我确实有错误。感谢您立即回复。

+3

发表一些代码,否则不可能说出什么是错的。 – 2010-12-16 22:41:51

+0

对不起那够了吗? – donok 2010-12-16 22:48:43

+2

我怀疑这是一项家庭作业 - 如果是的话,你应该这样标记它。你的问题很不清楚 - 我认为你很沮丧,也许你的任务已经很晚了,但请尽量清楚,以便我们知道如何提供帮助。您是否试图连接多个文件,或者您是否试图以这种方式存储它们,以便稍后可以轻松地将它们分离回原始文件中? – nategoose 2010-12-16 22:53:42

回答

1

它有助于查看您的代码。这里没有太多要继续,但我会大胆猜测。我怀疑你正在复制argv[0](你的程序)指定的文件而没有得到其他的文件。我不认为我可以用你给的东西做得更好。

+0

我想你可能是对的我用我太多次的东西,所以我会仔细检查。谢谢 – donok 2010-12-17 15:36:03

1

你说你只使用API​​调用。你在说什么API? POSIX API?标准的C文件I/O API?

如果你只是组合输入文件,你并不需要编写一个C程序来完成它。由于您正在运行Linux,请尝试使用shell命令cat input1 input2 input3 > output

如果你必须编写一个C程序来做到这一点,从简单的开始。在实际执行任何文件I/O之前,请确保您可以正确解释输入参数。让你的程序只需在命令行输入读取并打印出来是这样的:

Input files: file1.txt file2.txt file2.txt 
Output files: outputfile.txt 

这样的话,你可以验证你的CLI解析代码你开始担心文件I/O之前正常工作。一次调试一件东西要容易得多。

+0

对不起,我的意思是我的POSIX API很明显,但我忘了提及。 – donok 2010-12-17 15:30:51

1

您的外部循环需要打开每个文件名,并在循环结束时关闭它。读完所有输入文件后,关闭输出文件。

你也应该学会openreadwritefopenfreadfwrite之间的差异。

相关问题