用C读写文件

用C读写文件,第1张

概述我正在用C编写一个程序,它基本上为给定的文件名列表创建一个存档文件.这与 linux中的ar命令非常相似.这是存档文件的样子: !<arch>file1.txt/ 1350248044 45503 13036 100660 28 `hellothis is sample file 1file2.txt/ 1350512270 45503 13036 我正在用C编写一个程序,它基本上为给定的文件名列表创建一个存档文件.这与 linux中的ar命令非常相似.这是存档文件的样子:
!<arch>file1.txt/      1350248044  45503 13036 100660  28        `hellothis is sample file 1file2.txt/      1350512270  45503 13036 100660  72        `hellothis is sample file 2this 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读/写文件所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存