【发布时间】:2017-07-18 15:02:37
【问题描述】:
可以有尽可能多的文件,但必须至少有一个。 形式为“可执行文件名”“标志”“存档名”“文件....”。如何找出命令行中给出了多少文件?我知道我必须使用循环。然后,一旦我发现有多少文件,我如何打开每个文件并浏览每个文件,然后将它们全部放入存档文件中?存档文件是二进制的,对吗?我必须记录给我的文件数量,然后是每个文件的名称,每个文件的名称有多长,每个文件的大小,然后是每个文件的内容,然后将它们全部放入存档文件中。无压缩
【问题讨论】:
-
argc是argv中的元素总数(包括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