首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动生成文件名而不发生冲突

自动生成文件名而不发生冲突
EN

Stack Overflow用户
提问于 2009-03-31 02:34:31
回答 5查看 2.4K关注 0票数 2

我正在写一个“文件共享主机”,我想要重命名所有的文件时,上传到一个唯一的名称,并以某种方式保持跟踪数据库中的名称。由于我不希望两个或更多的文件具有相同的名称(这肯定是不可能的),我正在寻找一种基于键或其他东西为我生成随机名称的算法。

此外,我不想生成一个名称并搜索数据库来查看该文件是否已经存在。我想要确保100%或99%生成的文件名从未被我的应用程序早先创建过。

你知道我该怎么写这样的应用程序吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-31 02:56:06

您可以根据文件内容本身生成散列。这样做有两个很好的理由:

  1. 允许您永远不会将同一文件存储两次-例如,如果您有两个内容相同的音乐文件副本,您可以检查您是否已经存储了该文件,然后只存储一次。
  2. 您将元数据(文件名就是元数据)与blob分开。因此,您将拥有一个按文件内容的散列进行索引的存储系统,然后将文件元数据与该散列查找代码相关联。

根据散列的大小,找到两个计算相同散列但内容并不相同的文件的风险很低,您可以通过将文件分块散列来有效地缓解这种风险(这可能会导致一些有趣的存储优化场景:P)。

票数 11
EN

Stack Overflow用户

发布于 2009-03-31 02:37:33

GUIDs是单向的。你基本上保证不会得到任何重复(如果你有一个合适的随机生成器)。

票数 4
EN

Stack Overflow用户

发布于 2009-03-31 02:40:21

您还可以附加自纪元以来的时间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/699815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档