C# 复制文件名问题

C# 复制文件名问题,c#,asp.net,C#,Asp.net,我有一个网页,在其中可以创建不同的用户帐户,为单个用户创建的文件将显示在gridview中。也就是说,abc登录时,abc创建的文件将显示在gridview中。每当用户创建文件时,这些文件都存储在一个文件夹中,因此每当用户单击gridview中的文件名时,控件就会转到该文件夹打开它。现在我的问题是如何管理文件名的复制。也就是说,如果用户abc创建了一个文件名“Lion”,则该文件名将存储在文件夹和数据库中,并在用户登录时显示给abc。现在另一个用户说xyz想要创建相同的文件名“Lion”,它将存

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

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

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

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

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

如果用户只能看到自己的单独文件,则您的应用程序应为每个用户创建一个唯一命名的文件夹(可能使用其记录ID),所以不会有文件名冲突。您也可以考虑IsolatedStorage的情况。

数据库中有两列:

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


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

的文件发送给他们,每个用户有不同的文件夹。你的意思是说如果有20个用户,我需要创建20个文件夹。。那不好。@slm为什么不呢?​​​​​​​​​​​​​​​​​​​​​​​​​存储在数据库中不是问题。我将所有文件存储在一个文件夹中,然后,数据库中只存储名称。因此,当单击gridview中的文件名时,控件将发送到文件夹以打开该文件。我还有一个功能,用户可以将其文件共享给其他用户。因此,如果一个用户的列表中存在文件名“Moon”,并且他也与其他用户共享该文件,那么“Moon”也将包含在其他用户的列表中。那么我该怎么办呢?当用户点击“moon”时,他实际上是在点击一个id为
42
且显示名为“moon”的文件。ID是唯一的,名称不是.Ya,但我没有将文件(.docx、.xlsx、.pptx)存储在数据库中,因此当用户名单击gridview中的列时,文件名将从文件夹中打开该文件。我希望你能理解我想说的话。或者是否可以将文件(.docx、.xlsx、.pptx)本身与内容一起存储在数据库中?