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

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

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

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

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

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

EN

Stack Overflow用户

发布于 2009-03-31 02:57:25

已经提到了最好的解决方案。我只想补充一些想法。

最简单的解决方案是在每个新文件上都有一个计数器并递增。只要只有一个线程创建新文件,这种方法就能很好地工作。如果多个线程、进程甚至系统添加了新文件,事情就会变得有点复杂。您必须使用锁定或任何类似的同步方法来协调新ids的创建。您还可以为每个进程分配id范围,以减少同步工作,或者通过唯一的进程id扩展文件id。

更好的解决方案可能是在此场景中使用GUID,而不必关心进程之间的同步。

最后,您可以将一些随机数据添加到每个标识符,以使它们更难猜测这是否是必需的。

此外,coommon将文件存储在目录结构中,其中文件的位置取决于其名称。abcdef1234.xyz文件可能存储为/ab/cd/ef/1234.xyz。这避免了包含大量文件的目录。我真的不知道为什么这样做-可能是文件系统的限制,性能问题-但这是相当常见的。如果文件直接存储在数据库中,我不知道类似的事情是否常见。

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

https://stackoverflow.com/questions/699815

复制
相关文章

相似问题

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