以他的名字的一部分打开文件

时间:2014-06-19 09:29:38

标签: c# date timestamp

我需要通过名称的一部分从文件夹打开文件。 我有一个文件夹中的文件,例如所有文件都在c:\ temp \ 文件名的格式为id_yyyyMMdd.pdf,其中id是某个数字,文件ID,id始终是唯一的,yyyyMMdd是格式年,月,日的日期。 现在在程序中我得到id,我需要找到具有该id的文件,然后检查创建文件的日期,如果有新版本的文件(数据库中的blob)我需要将这个新文件写入磁盘而不是打开它,如果这是我需要打开的文件的最后一个版本。(我有像blob一样的PDF,我需要检查硬盘上一个版本文件。)我知道如何从blob写入pdf到文件我找不到打开的方法(或找到)带有部分名称的文件,并获得第二部分(日期)进行比较。

有什么建议吗?

样品: 在硬盘上我有文件:

  • c:\ temp \ 12345_20140508.pdf
  • C:\ TEMP \ 12346_20140508.pdf

在数据库表中我有

  • id(12345)date(08-MAY-2014)和pdf1文件,如blob。
  • id(12346)date(10-MAY-2014)和pdf2文件,如blob。

现在在程序中我选择id“12345”因为日期相同我需要打开文件12345_20140508.pdf 当我得到select id 12346时,我需要先从数据库中获取文件文件,因为数据库中的日期比硬盘上的日期更新,删除文件12346_20140508.pdf并保存新文件,如12346_20140510.pdf而不是打开。

如果需要,我可以更改名称的格式。

2 个答案:

答案 0 :(得分:1)

你应该做的是:

string searchPattern = "what you want to open";

File.Open(Directory.GetFiles(@"c:\", searchPattern + "*").First());

这将在c#意义上打开文件,

但要在应用中打开

Process.Start("notepad.exe", Directory.GetFiles(@"c:\", searchPattern + "*").First());

如果你想打开它们,请将它们包装在foreach中

foreach (var file in Directory.GetFiles(@"c:\", searchPattern + "*"))
{
    //do stuff
}

答案 1 :(得分:1)

我认为你遇到的主要问题是"如何通过id"找到最新的文件。所以可能你可以试试这段代码。它可以找到最后创建的文件以一些id开头。一旦你收到文件,我认为其他事情对你来说不会成为问题。

var directoryInfo = new DirectoryInfo(@"c:\temp");
var latestFile = directoryInfo.GetFiles()
                              .Where(f => f.Name.StartsWith("12345_"))
                              .OrderByDescending(f => f.CreationTime)
                              .FirstOrDefault();