【问题标题】:C (UNIX), Combining files (number of bytes)C (UNIX),组合文件(字节数)
【发布时间】:2017-06-16 08:55:13
【问题描述】:

所以我试图按照提供的顺序组合任意数量的给定文件并将输出打印到标准输出。文件名和规范是通过 UNIX 命令行给出的。我的输入验证完全工作,我只是无法弄清楚如何将我的想法放入 C 语法中(我以前从未用 C 编码过)。

&g 将合并整个文件 &qN (N 是一个整数) 将只组合前 N 个字节 &uN (N 是一个整数) 将只组合最后 N 个字节

我认为最好的方法是用 fopen 打开文件,弄清楚它有多大并制作一个那么大的缓冲区,然后读入该缓冲区(使用 fread)并写入缓冲区(使用 fwrite)。我觉得解决方案相当简单,不应该超过几行。

我对第一个规范 &g 的尝试如下。我只能做到这一点,因为这对我来说是一种非常新的语言。

FILE *fp;
fp = fopen(file, "r");

// if file fails to open - file is not found
if (fp == NULL)
{
    perror("file %s does not exist", file);
}
else
{
    fseek(fp, 0L, SEEK_END);
    file_sz = ftell(fp);
    fseek(fp, 0L, SEEK_SET);
    buffer = malloc(sizeof(file_sz));
 }

【问题讨论】:

  • 为什么不使用 getline 并一次读取和打印每一行?
  • 请提出具体问题。我们不会为你做所有的事情。那么你具体需要什么帮助呢?您已经分配了缓冲区,现在读取文件。它可能不是最好的解决方案,但至少尽可能多地实施。然后在遇到特定问题时提出特定问题。
  • malloc(sizeof(file_sz)); 应该是malloc(file_sz);
  • 更具体地说,我的问题是我什至不知道我是否朝着正确的方向前进。如何合并文件?一旦我知道唯一需要弄清楚的是如何指定要组合的字节。这让我迷失了方向,因为我不知道从哪里开始(我不太了解这种语言)。
  • 目前还不清楚您是否真的需要“合并”文件。描述说“将输出打印到标准输出”。这不需要“组合”。只需根据需要尽可能多地阅读每个文件并随时打印出来。如果您确实需要“合并文件”,请澄清这意味着什么 - 例如这是否意味着生成包含组合内容的输出文件?

标签: c unix command-line command


【解决方案1】:

以下是一个基本示例,可用于启动和运行一些好的东西。

#include <stdio.h>
#include <strings.h>
#include <string.h>
#include <stdlib.h>

char buffer[1001]; // NYI - no magic numbers. Static size....

int main(int argc, char** argv) {
  bzero(buffer, sizeof(buffer));
  for(int x=1; x<argc; x++) {
    FILE *fp = fopen(argv[x], "r+");
    if (fp) {
      while(fgets(buffer, 1000, fp)) { // NYI - no magic numbers 
        printf("%s", buffer);
      }
    } else {
      printf("could NOT open file %s\n", argv[x]);
    }
  }
} 

【讨论】:

  • 使用 fgets/fprintf 是不必要的,因为原始副本就足够了,因为 OP 想要按原样复制整个文件。 fread/fwrite 更合适。
  • 非常感谢!我必须更改一些东西才能使用我的代码,但我很高兴它正在工作。如何让它打印文件的最后 N 个字节?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多