用C读/写文件

前端之家收集整理的这篇文章主要介绍了用C读/写文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在用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)?

3)如何判断文件内容何时结束?即我需要它来读取内容并在file2.txt / header之前停止.

解决方法

解决这个问题的方法是:

获取包含每个文件大小,其名称及其在文件中的位置的标头信息.

然后解析头,使用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次.我想我清楚了吗?

猜你在找的C&C++相关文章