gpt4 book ai didi

c - C语言读/写文件

转载 作者:太空狗 更新时间:2023-10-29 17:12:35 27 4
gpt4 key购买 nike

我正在用 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 之前停止。

最佳答案

我解决这个问题的方法是:

要有一个头信息,其中包含每个文件的大小、名称和在文件中的位置。

然后解析header,使用fseek()和ftell()以及fgetc()fread()函数得到文件的字节,然后创建+写入该数据。这是我能想到的最简单的方法。

http://en.wikipedia.org/wiki/Ar_(Unix)#File_header <- ar 文件的标题。

例子:@programmer93 考虑您的 header 长 80 个字节( header 包含存档文件的元数据)。您有两个文件,一个 112 字节,另一个 182 字节。现在它们被放置在一个平面文件(存档文件)中。所以它将是 80(header).112(file1.txt).182(file2.txt).EOF 。因此,如果您知道每个文件的大小,就可以轻松导航(使用 fseek())到特定文件并仅提取该文件。 [为了提取 file2.txt,我只需要 fseek(FILE*,(112+80),SEEK_SET); 然后 fgetc() 182 次。我想我说清楚了吗?

关于c - C语言读/写文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com