使用C ++的文件系统

时间:2013-11-14 06:01:46

标签: c++ filesystems

我必须使用C ++这样做 我必须建立一个文件系统。在文件系统初始化时,应初始化一个10 MB的文件。文件应分为3部分。 应为文件名和文件中数据的起始地址保留文件“File_system”的第一部分(1MB)。它应该细分为子块,每个容量为500B。换句话说,文件的第一个块(1 MB)中的每个子块应该具有存储文件名和起始地址的容量,该地址不应超过500B。 文件“File_system”的第二部分(1MB),用于列出第三部分中可用的空块 文件“File_system”的第三部分(8MB),用于在第一部分中列出的文件中写入的数据。 我知道文件处理,链接列表,树,类。 我还没有任何线索如何开始。如何在文本文件中分配空间。

1 个答案:

答案 0 :(得分:0)

您通常通过定义一些结构来表示每个部件的数据。例如,您的第一部分(500字节)结构将是这样的:

#pragma pack(push, 1) // or equivalent
struct directory_entry { 
    long starting_address;
    char file_name[500-sizeof(long);
};
#pragma pack(pop)

对于该文件,您将需要一个占用1兆字节的数组。

第二部分可能最容易设置为位图。确定用于存储本身的块大小。为简单起见,假设1千字节。因此,您将第三部分的8 MB视为1 KB块的数组。第二部分将有一位专用于每个1 KB块。如果该块是空闲的,则为0;如果该块正在使用,则为1。

您可以通过将所有内容设置为0字节来初始化它。然后,要创建一个文件,您将扫描目录条目部分,直到找到其starting_address仍设置为0的条目。然后,您将扫描第二部分中的位图以找到可以使用的空间。您将该空间的位设置为1,并将目录条目中的starting_address设置为与您未找到的块对应的地址。

为了支持文件中的多个块,您可以(例如)将每个块的最后4个字节用于组成该文件的下一个块的地址(以及一些表示文件末尾的不可能的值) )。对于大多数目的而言,这不是最有效的方法,但它可能足以完成手头的任务。

当然,每种方法都有很多替代方案。我所概述的是一个非常简单,但(实际上)非常低效的文件系统类型与30年前在真正的低端计算机上看到的相似 - 但仅举一个明显的例子,即使是MS-DOS FAT文件系统也更复杂。