C:读入多个文件

时间:2010-12-20 15:07:31

标签: c posix

嘿大家使用POSIX API系统调用readwriteopen等。我可以打开,读取,写入文件并将其内容复制到输出文件。如何仅使用相关的系统调用将多个文件复制到输出文件?

我目前有:

filein = open(argv[1],O_RDONLY,0);

打开一个文件。(这是argv1,但我想知道如何做argv2和argv3等。)

我试过了:

j=0;
filein = open(argv[j],O_RDONLY,0);

但是将argv0的​​内容打印到我的输出文件中。

我被困在下一个阶段做多个文件。 (我还有一个EOF循环,所以退出1个文件后 - 如何继续下一个文件)。

请问您如何进入下一阶段?感谢。

4 个答案:

答案 0 :(得分:4)

背景

argv[0]是该计划的名称。

argv[1]是1 st 命令行参数。

argv[2]是2 nd 命令行参数。

所以:

  1. 1处开始循环,而不是0(即j=0不正确)。
  2. 请务必在阅读文件后立即关闭文件,然后再打开下一个文件。
  3. 算法

    在编写代码之前考虑算法。

    1. 将计数器设置为第一个参数的索引。
    2. 打开文件。
    3. 为打开的文件指定句柄。
    4. 阅读文件内容。
    5. 写入(如果需要)文件内容。
    6. 使用句柄关闭文件。
    7. 增加柜台。
    8. 循环,直到没有更多命令行参数。
    9. 现在你可以编写代码了。

      如果包含错误处理,您可能会获得奖励积分。 (当文件丢失,无法读取,文件系统损坏或机器内存或磁盘空间不足时会发生什么?)

      连接文件

      如果要将两个文件名连接到第三个文件名,则需要重新考虑算法以及所需的内容。 “读取命令行中给出的前两个文件并将它们写入第三个文件”和“将命令行上给出的所有文件附加到给定的最后一个文件”之间存在差异。

      读两个,写一个

      算法:

      1. 确保有三个参数。
      2. 为第三个文件(输出)创建文件句柄变量。
      3. 为第一个文件(输入)创建文件句柄变量。
      4. 为第二个文件(输入)创建文件句柄变量。
      5. 打开第一个文件进行阅读。
      6. 打开第二个文件进行阅读。
      7. 打开第三个文件进行写作。
      8. 读取第一个文件的内容并将其写入第三个文件。
      9. 读取第二个文件的内容并将其写入第三个文件。
      10. 关闭第三个文件。
      11. 关闭第二个文件。
      12. 关闭第一个文件。
      13. 此时你会注意到很多冗余。

        读N,写一个

        此算法更具挑战性,但会消除冗余。

        1. 确保至少有两个参数。
        2. 打开最后一个文件进行写作。
        3. 遍历每个文件名,但不包括最后给出的文件名:
          1. 打开输入文件进行阅读。
          2. 将文件的内容写入最后一个文件。
          3. 关闭输入文件。
        4. 关闭输出文件。
        5. 为此,您需要了解argc及其与argv的关系。在伪代码中:

          if number_of_arguments < 2 then
            print "This program concatenates files; two or more file names are required."
            exit
          end
          
          int outfile = open arguments[ number_of_arguments ] for writing
          int j = 1
          
          while j < number_of_arguments do
            int infile = open arguments[ j ] for reading
            string contents = read infile
            write contents to outfile
            close infile
            increment j
          end
          
          close outfile
          

          教程

          如果您遇到C语法问题,请搜索教程。例如:

答案 1 :(得分:2)

使用循环读取所有文件。从1开始跳过当前正在执行的进程,该进程位于argv [0]。

for(int i = 1; i < argc; ++i)
{
    int filein = open(argv[i],O_RDONLY,0);
    // ... process file
    close(filein)
}

答案 2 :(得分:1)

argv [0]是程序的名称。 argv [1]是第一个传递命令行的。

打开输出文件,然后打开每个输入文件。将每个输入文件读入输出文件,然后将它们全部关闭并退出。

答案 3 :(得分:1)

  

打开一个文件。(这是argv1,但我想知道如何做argv2和argv3等。)

fopen(argv[2], ...)