gpt4 book ai didi

c - 关于文件 I/O(读/写消息字符串)的很多问题

转载 作者:行者123 更新时间:2023-12-03 03:30:30 25 4
gpt4 key购买 nike

对于我正在做的这个大学项目(我过去曾为此发表过几篇文章),它是某种社交网络,需要用户能够交换消息。

首先,我设计了数据结构以将所有消息保存在链接列表中,将消息大小限制为 256 个字符。但是,我认为我的导师会更喜欢我将消息保存在磁盘上并仅在需要时才读取它们。当然,他们不会说他们喜欢什么,我需要做出选择并尽我所能证明为什么我要走这条路。

需要记住的一件事是,我只需要保存每个用户最新的 20 条消息,不再需要。

现在我有一个哈希表将充当收件箱,它将位于用户配置文件内。该哈希表将按名称(发送消息的用户)进行索引。每个元素的值将是一个数据结构,其中包含一个包含 20 个元素的 size_t 数组(如我上面所说的 20 条消息)。这个想法是跟踪磁盘文件偏移和写入的字节。然后,当我需要读取消息时,我只需要使用 fseek() 并读取必要的字节。

我认为这可以很好地工作...我可以只使用一个文件来保存来自网络中所有用户的所有消息。我说的是单个文件,因为一位同事询问一位讲师如何独立保存每个用户的消息,他回答说这可能不是最好的方法,因为文件系统有其限制。这就是为什么我考虑采用单文件路线。

但是,这提出了一个问题...由于我只需要保存最新的 20 条消息,因此当达到此限制时,我需要丢弃较旧的消息。

我不知道该怎么做...我所知道的只是关于从文件读取字节或向文件写入字节的fread()fwrite()。如何转到文件偏移量并说“嘿,删除以下 X 字节”?即使我可以做到这一点,还有另一个问题...低于该偏移量的所有偏移量都将完全不同,我必须处理所有用户邮箱才能解决问题。这会很痛苦...

那么,有什么建议可以解决我的问题吗?你有什么建议?

最佳答案

你不能任意删除文件中间的字节;唯一有效的方法是在没有它们的情况下重写整个文件。忽略这种方式是否是一个好主意的问题,如果您有固定长度的字段,一种解决方案是用最新的消息覆盖最旧的消息;这样,磁盘上消息的大小/位置不会改变,因此其他偏移量不会受到影响。

编辑:如果允许使用外部库,请制作一个简单的 SQLite db 可能是一个很好的解决方案。

关于c - 关于文件 I/O(读/写消息字符串)的很多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2619264/

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