2012-11-12 21 views
-1

是否有办法获取所有文件(上次在特定日期修改),并将它们保存到新文件夹中(具有特定名称日期)。C#:从特定日期获取所有文件并将其保存到文件夹

示例文件:

内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); 

但我不要如何保存VA r文件转换为其他文件夹名称。

+6

'是否有way'翻译:写给我 –

+0

将问题分解成更小的步骤。如果您被困在一个步骤中,请提出一个更具体的问题,并包含您尝试过的代码。 –

+1

我认为这是一个公平的问题。他没有问“你怎么做?”他问,“有没有办法?” (即有可能)。如果不可能,试图弄明白这一点毫无意义。 – davids

回答

4

也许:

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)); 
+0

我目前正在尝试使用您的代码使用多种搜索模式。有没有办法可以添加.png和其他文件? (除了JPG) – abramlimpin

+0

@eibhrum:然后你需要手动过滤它们,相应地编辑我的答案。 –

+0

谢谢,先生!很好的帮助。 – abramlimpin

1

确实有办法。查看Path和Directory类以迭代文件和目录以及创建新的文件和目录。一旦你在一个文件夹中,一些简单的Google搜索应该能够显示如何阅读文件的修改日期,然后你只需要将它们排队写入新的位置。让我们知道是否有任何这些令你感到困惑,并尝试发布一些代码并在你的部分显示一些努力。通常人们会有很多更好,downvote你少:)

+0

已记录。我注意到,当我提交代码时,我无法包含代码。只花了5分钟才能收到如此多的降价。好吧。 – abramlimpin

1

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

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

相关问题