C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用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个字符以获取文件的@L_618_15@,读取@L_618_15@并将其写入新文件.所以这是我的问题:

1)如何在归档文件获取文件名的索引/位置?请注意,不允许使用重复的文件名,因此我不必担心有两个不同的@L_618_15@.

2)如何在读取文件时跳过多个字符(在本例中为58)?

3)如何判断文件@L_618_15@何时结束?即我需要它来读取@L_618_15@并在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读/写文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:c文件