【问题标题】:Open file by part of his name用他的名字的一部分打开文件
【发布时间】:2014-08-09 19:04:14
【问题描述】:

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

有什么建议吗?

示例: 在硬盘上我有文件:

  • 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 当我得到选择 id 12346 时,我需要首先从数据库中获取文件文件,因为数据库中的日期比硬盘上的日期新,删除文件 12346_20140508.pdf 并保存新文件,如 12346_20140510.pdf,然后打开。

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

【问题讨论】:

    标签: c# date timestamp


    【解决方案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
    }
    

    【讨论】:

      【解决方案2】:

      我认为您遇到的主要问题是“如何通过 id 查找最新文件”。所以也许你可以试试这个代码。它可以找到最后创建的以某个 id 开头的文件。拿到文件后,我认为其他事情对你来说不会有问题。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-03
        • 2020-01-29
        相关资源
        最近更新 更多