复制文件名问题

时间:2012-02-07 18:41:35

标签: c# asp.net

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

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

数据库中有两列:

OriginalFilename NVARCHAR(255),
StoredFilename NVARCHAR(255)

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

当用户要求提供其文件列表时,向他们显示OriginalFIlename列以及他们下载文件时,请通过StoredFilename列访问该文件,然后使用文件名集将其发送给他们到OriginalFilename

答案 2 :(得分:0)

文件的名称应该是您的主键,只是一个额外的列。对于磁盘上的文件,您可以使用Guid或引用数据库中的行的另一个唯一键,而该行又保留文件的名称以供显示。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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