我正在用C编写一个程序,它基本上为给定的文件名列表创建一个存档文件.这与
linux中的ar命令非常相似.这是存档文件的样子:
!<arch> file1.txt/ 1350248044 45503 13036 100660 28 ` hello this is sample file 1 file2.txt/ 1350512270 45503 13036 100660 72 ` hello this is sample file 2 this file is a little larger than file1.txt
但是我在尝试从存档中提取文件时遇到了困难.假设用户想要提取file1.txt.我们的想法是它应该获取文件名的索引/位置(在本例中为file1.txt),跳过58个字符以获取文件的内容,读取内容并将其写入新文件.所以这是我的问题:
1)如何在归档文件中获取文件名的索引/位置?请注意,不允许使用重复的文件名,因此我不必担心有两个不同的内容.
2)如何在读取文件时跳过多个字符(在本例中为58)?
解决方法
我解决这个问题的方法是:
然后解析头,使用fseek()和ftell()以及fgetc()或fread()函数来获取文件的字节,然后创建向其写入数据.这是我能想到的最简单的方法.
http://en.wikipedia.org/wiki/Ar_(Unix)#File_header< - 档案馆的标题. 例:@ programmer93考虑你的标题是80字节长(标题包含存档文件的元数据).您有两个文件,一个是112个字节,另一个是182个字节.现在它们被放置在一个平面文件(存档文件)中.所以它将是80(标题).112(file1.txt).182(file2.txt).EOF.因此,如果您知道每个文件的大小,则可以轻松导航(使用fseek())到特定文件并仅提取该文件. [提取file2.txt我只会fseek(FILE *,(112 80),SEEK_SET);然后fgetc()182次.我想我清楚了吗?