【问题标题】:Duplicating filename issue重复文件名问题
【发布时间】:2012-02-07 18:41:34
【问题描述】:

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

【问题讨论】:

  • 每个用户的不同文件夹

标签: c# asp.net


【解决方案1】:

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

【讨论】:

  • 你的意思是说如果有 20 个用户我需要创建 20 个文件夹.. 这不好。
  • @slm 为什么不呢?​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
【解决方案2】:

在您的数据库中有两列:

OriginalFilename NVARCHAR(255),
StoredFilename NVARCHAR(255)

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

当用户询问他们的文件列表时,向他们显示OriginalFIlename 列,当他们下载文件时,通过StoredFilename 列访问它,但将文件名设置为OriginalFilename 发送给他们.

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 在数据库中存储在这里不是问题。我将所有文件存储在一个文件夹中,然后只将名称存储在数据库中。因此,当单击 gridview 中的文件名时,控件将发送到文件夹以打开该文件。我还有一个设施,用户可以将他的文件分享给其他用户。因此,如果一个用户的列表中存在文件名“Moon”并且他也与其他用户共享该文件,那么“Moon”也将包含在其他用户的列表中。那么我该如何管理呢?
    • 当用户点击“moon”时,他实际上点击的是id为42显示名称为“moon”的文件。 ID 是唯一的,名称不是。
    • 是的,但我没有将文件(.docx、.xlsx、.pptx)存储在数据库中,因此当用户名单击网格视图中的列时,将使用文件名打开该文件文件夹中的文件。我希望你能理解我想说的。或者是否可以将文件(.docx、.xlsx、.pptx)本身与内容一起存储在数据库中?
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2012-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-30
          • 2014-02-06
          相关资源
          最近更新 更多