C# 是否有管理文件的设计模式/好方法?

C# 是否有管理文件的设计模式/好方法?,c#,sql-server,file-io,C#,Sql Server,File Io,我正在开发一个库存管理应用程序。我可以创建的每种项目都继承了一个带有一些字段(创建日期、描述等)的通用基类。所有这些项目都可以有文档文件(pdf、文本文件、图片,没关系)。这些文件存储在公开可用的网络共享上。我已经有了一个基本的功能原型,可以:让用户选择一个文件,上传它,打开它,并将相关信息保存到数据库中。以下是一个基本示例: //choosing and copying the file string filename; string destination; Microsoft.Win32.

我正在开发一个库存管理应用程序。我可以创建的每种项目都继承了一个带有一些字段(创建日期、描述等)的通用基类。所有这些项目都可以有文档文件(pdf、文本文件、图片,没关系)。这些文件存储在公开可用的网络共享上。我已经有了一个基本的功能原型,可以:让用户选择一个文件,上传它,打开它,并将相关信息保存到数据库中。以下是一个基本示例:

//choosing and copying the file
string filename;
string destination;
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();                       
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
  filename = dlg.FileName;
  destination = @"\\theshare\Data\Doc\";
  textBox1.Text = filename;//just for test/display purpose
  File.Copy(filename, destination + dlg.SafeFileName);
  SaveInfoInDatabase(dlg);//description, path
}

//open the file with default application, called by a button press
System.Diagnostics.Process.Start(destination + dlg.SafeFileName);
//选择并复制文件
字符串文件名;
字符串目的地;
Microsoft.Win32.OpenFileDialog dlg=新的Microsoft.Win32.OpenFileDialog();
可为空的结果=dlg.ShowDialog();
如果(结果==真)
{
filename=dlg.filename;
目的地=@“\\theshare\Data\Doc\”;
textBox1.Text=filename;//仅用于测试/显示目的
File.Copy(文件名、目的地+dlg.SafeFileName);
SaveInfoInDatabase(dlg);//说明,路径
}
//使用默认应用程序打开文件,按按钮调用
System.Diagnostics.Process.Start(目标+dlg.SafeFileName);
在进一步讨论之前,我问自己以下问题:

  • 我应该异步运行这段代码吗?迄今为止最大的文件约为50MB
  • 我应该为文件名使用GUID而不是它们的原始名称,还是在文件名相同的情况下在末尾添加一个数字
  • 我应该如何处理重复项?(假设20个不同的项目共享同一个
    pdf文档)
  • 我应该保存绝对路径还是只保存文件名并为目录使用常量字符串
  • 如果一个文件可以修改,我应该制作一个本地副本,打开它然后再复制回来,还是 打开原件?并发性不是一个大问题,它主要是参考资料
  • 我走错路了吗?这类任务可能有设计模式/指南,但我没有发现任何有意义的东西
  • 我应该以不同的方式打开文件吗?可能会问用户

  • 很多问题和代码本身并没有太大关系,但我也遇到过和你们一样的问题,所以我会尝试一下

  • 我会说,绝对是的。我使用这个类就是为了这个目的,但是如果你使用的是.NET4.5,你可以使用
  • 我在以前的工作中遇到了同样的问题,我使用guid作为文件名,因为它们非常(足够)独特
  • 您必须对此进行澄清,如果某些项目使用相同的文档,也许您可以存储对PDF的引用(在检查是否存在之后)
  • 我只会储存你需要的东西。如果文件位置在同一个位置,并且它永远不会改变(事情总是会改变),那么我认为只存储文件名没有任何害处。但是情况确实会发生变化,请注意这一点,因此请尝试将文件位置设置为可配置的(app.config、web.config等)
  • 我在传输关键业务文件-我使用File.Copy,直接从源文件传输到目标文件。在将任务标记为已完成之前,我对目标上是否存在该文件进行了一些额外检查。在大多数情况下似乎都很好,如果由于任何原因失败,它将重试,直到能够复制它。因此,您可以调整应用程序以执行相同的操作,即尝试复制文件,检查文件是否存在,然后返回成功
  • 我认为,因为是文件,所以你总是要处理文件的错误(锁定、异常等)。管理它的最好方法是一个好的框架,从小处着手,只需有两个文件夹,编写一个控制台应用程序,将每个文件循环复制到另一个目录,然后逐步升级。我还没有看到管理文件的硬性指南或设计模式,但您可以为其创建一个相当健壮且可重用的框架
  • 用户不是在要求您上传文件吗

  • 我过去必须建立系统。下面是我如何解决这些问题的:

  • 对。不要阻塞UI线程
  • 使用GUIDs/db键作为文件名
  • 不要。在我的应用程序中,每个文件都可能经过几次修订,仅仅因为一个文件在版本1.0中是重复的,并不意味着它们在将来不会出现分歧
  • 不要将文件名直接存储在数据库中,尤其是绝对路径。使用更高级别的代码从DB GUID/ID文件名转换
  • 对。永远不要直接修改源文件。您甚至可能希望包括一个签入/签出系统,以防止两个人编辑同一个文件
  • 如果从一开始就不限制自己的范围,这些类型的项目可能会很快失控(事实上任何软件产品都可以)。我建议你在继续之前确保这是你真正需要的
  • 不。在客户端系统上使用默认应用程序比我见过的任何替代方案都要容易得多

  • 嘿之后有一个免责声明!是 啊我无法计算一个经理许下承诺,并在下一个发布周期(有时甚至是同一个发布周期)违背承诺的次数。配置文件的目录路径,文件名(DB)。