文件名重复问题

本文关键字:问题 文件名 | 更新日期: 2023-09-27 18:23:53

我有一个网页,可以在其中创建不同的用户帐户,为单个用户创建的文件将在网格视图中显示。也就是说,当abc登录时,abc创建的文件将显示在gridview中。每当用户创建文件时,这些文件都存储在一个文件夹中,这样每当用户单击gridview中的文件名时,控件就会转到该文件夹打开它。所以现在我的问题是如何管理文件名的重复。也就是说,如果用户abc创建了一个文件名"Lion",它将存储在文件夹中,也存储在数据库中,并在他/她登录时显示给abc。现在另一个用户说xyz想要创建相同的文件名"狮子",并将其存储在同一文件夹中,那么由abc创建的文件将被xyz创建的文件替换。我该如何避免这种情况?

文件名重复问题

为每个用户创建一个单独的文件夹。

在数据库中有两列:

OriginalFilename NVARCHAR(255),
StoredFilename NVARCHAR(255)

当用户存储一个文件时,可以为它创建一个新名称,可以使用Guid.New()来确保它有一个唯一的名称,并将文件保存到具有该名称的文件夹中。在数据库中插入一条保存原始名称的记录。

当用户要求提供其文件的列表时,向他们显示OriginalFIlename列,当他们下载文件时,通过StoredFilename列访问文件,但将文件名设置为OriginalFilename发送给他们。

文件名不应该是主键,而应该是附加列。对于磁盘上的文件,您可以只使用引用数据库中行的Guid或其他唯一键,而数据库中的行也包含文件名,仅用于显示目的。

因此,您基本上需要编写检查文件名是否已经存在的逻辑。如果它确实存在,则需要更改文件名,使其唯一。您可以向其附加一个字符串(guid、时间戳、-1的前几个字符)或类似的内容。

您可以为每个用户创建一个文件夹,您可以使用数据库存储文件显示名称,并为每个文件名添加一个guid。

如果用户应该只看到他们自己的单独文件,那么你的应用程序应该为每个用户创建一个唯一命名的文件夹(可能使用他们的记录ID),这样就不会有文件名冲突。对于这种情况,您也可以考虑使用IsolatedStorage。