【问题标题】:C#: Get All Files From a Specific Date and Save It To a Folder [closed]C#:从特定日期获取所有文件并将其保存到文件夹 [关闭]
【发布时间】:2012-11-12 15:43:00
【问题描述】:

有没有办法获取所有文件(在特定日期最后修改),并将它们保存到新文件夹中(使用特定日期的名称)。

示例文件:

内部 C:/

Image File     Date Modified

Image001.jpg   11/12/2012
Image002.jpg   11/12/2012
Image003.jpg   11/13/2012
Image004.jpg   11/12/2012

输出应该是:

C:/20121112/

Image001.jpg
Image002.jpg
Image004.jpg  

C:/20121113

Image003.jpg

我目前使用的语法如下:

var mydirectory = new DirectoryInfo("C:/");
DateTime from_date = DateTime.Now.AddDays(-1);
DateTime to_date = DateTime.Now;
var files = directory.GetFiles()
  .Where(file=>file.LastWriteTime >= from_date && file.LastWriteTime <= to_date);

但我不知道如何将 var 文件保存到另一个文件夹名称。

【问题讨论】:

  • Is there a way翻译:写给我
  • 将问题分解为更小的步骤。如果您卡在某个步骤上,请提出更具体的问题并附上您尝试过的代码。
  • 我认为这是一个公平的问题。他没有问“你是怎么做到的?”他问:“有办法吗?” (即有可能)。如果不可能,尝试弄清楚是没有意义的。
  • @davids 然后我给出答案:是的,这是可能的。
  • System.IO 拥有神奇宝贝! msdn.microsoft.com/en-us/library/system.io.aspx

标签: c# file file-management


【解决方案1】:

也许:

var files = Directory.EnumerateFiles(path, "*.jpg", SearchOption.TopDirectoryOnly)
                     .Select(fn => new FileInfo(fn));
var fileDateGroups = files.GroupBy(fi => fi.LastWriteTime.Date);
foreach (var dateGroup in fileDateGroups)
{
    string dir = Path.Combine(@"C:\", dateGroup.Key.ToString("yyyyMMdd"));
    Directory.CreateDirectory(dir);
    foreach (var file in dateGroup)
    {
        string newPath = Path.Combine(dir, file.Name);
        File.Copy(file.FullName, newPath, true);
    }
}

编辑:如果您想搜索多个文件扩展名,您需要手动过滤它们:

var allowed = new[]{ ".png", ".jpg" };
var files = Directory.EnumerateFiles(path, "*.*", SearchOption.TopDirectoryOnly)
                     .Where(fn => allowed.Contains(Path.GetExtension(fn)))
                     .Select(fn => new FileInfo(fn));

【讨论】:

  • 我目前正在尝试使用您的代码使用多种搜索模式。有没有办法我也可以添加 .png 和其他文件? (除了jpg)
  • @eibhrum:然后你需要手动过滤它们,相应地编辑我的答案。
  • 谢谢,先生!很好的帮助。
【解决方案2】:

System.IO.FileInfo 提供创建、删除和打开文件的方法可用于此目的。要获取此文件的最后修改日期,您可以使用FileInfo.LastWriteTime,它返回一个DateTime

示例

string FileName = @"D:\Resources\Image001.jpg"; //Initializes a new string of name FileName as D:\..\Image001.jpg
FileInfo Information = new FileInfo(FileName); //Initializes a new instance of FileInfo to wrap a particular file 
DateTime DateModified = Information.LastWriteTime; //Initializes a new DateTime as Information.LastWriteTime

然后您可以使用System.IO.Directory.CreateDirectory(string path) 来创建一个特定目录,并将其命名为path

注意:不能创建包含/\?:*等无效字符的目录...这意味着你不能创建一个名为11/12/2012的目录

谢谢,
希望对您有所帮助:)

【讨论】:

    【解决方案3】:

    肯定有办法的。查看 Path 和 Directory 类以迭代文件和目录以及创建新目录。一旦您进入文件夹,一些简单的谷歌搜索应该能够显示如何读取文件的修改日期,然后您只需将它们排队以写入您的新位置。让我们知道这是否让您感到困惑,并尝试发布一些代码并展示您的一些努力。通常人们会变得更好,并且更少投票给你:)

    【讨论】:

    • 注明。我注意到提交时无法包含代码。只花了 5 分钟就收到了这么多反对票。哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多