【问题标题】:Creating an archiver executable and part of it is archiving files given from the command line arguments创建一个归档器可执行文件,其中一部分是归档从命令行参数给出的文件
【发布时间】:2017-07-18 15:02:37
【问题描述】:

可以有尽可能多的文件,但必须至少有一个。 形式为“可执行文件名”“标志”“存档名”“文件....”。如何找出命令行中给出了多少文件?我知道我必须使用循环。然后,一旦我发现有多少文件,我如何打开每个文件并浏览每个文件,然后将它们全部放入存档文件中?存档文件是二进制的,对吗?我必须记录给我的文件数量,然后是每个文件的名称,每个文件的名称有多长,每个文件的大小,然后是每个文件的内容,然后将它们全部放入存档文件中。无压缩

【问题讨论】:

  • argcargv 中的元素总数(包括argv[0] 中的可执行文件名)。所以argc - 3是输入文件的数量。
  • 您是遵循现有的存档格式标准还是要创建自己的存档格式标准?你知道argc 有多少参数,假设你的主程序有int main(int argc, char **argv)。您不需要循环来找出有多少文件。您确实需要一个循环来遍历文件列表。您的档案有集中式字典还是分布式字典?您是在文件顶部记录所有文件大小和名称(以及存档中的位置)信息(集中式),还是在存档中每个文件之前都有信息?
  • 是的,我有 int main(int argc, char **argv),哦,好吧,那么终端会自动知道 argc 的值吗?然后如何根据 argc 中有多少值循环遍历每个文件?但是这些文件直到 argv[3] 才会列出,所以我如何确保我只循环遍历文件并打开并将它们写入存档文件?那个循环会是什么样子?
  • for (int i = 3; i < argc; i++) { …process argv[i]…; } 大致是循环的样子。如果argc <= 3 - 没有足够的参数(除非其中一个选项不需要任何文件名 - 列表选项可能只需要命令名称、标志、存档名称(3 个参数))来列出所有文件,您可以抱怨。如果您使用 getopt() 处理选项字母,您可能需要对循环进行一些小的调整(主要从数组中的条目 optind 开始 - 并且您的参数计数检查也可能不同)。

标签: c image file command-line archive


【解决方案1】:
char *filenames[argc-3];
for(i = 3; i < argc; i++)
{
    filenames[i-3] = argv[i];
    printf("Files = %s\n", filenames
}

因此该循环将找出除了“可执行文件”“标志”“存档名称”之外还有多少个 argc 参数。然后,我将知道 argc 中有多少个文件。然后 filenames[] 会将文件存储在命令行参数中,对吗?那么我将如何遍历该数组并打开每个文件并使用我调用的不同函数确定大小?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    相关资源
    最近更新 更多