是否有办法获取所有文件(在特定日期最后修改),并将它们保存到新文件夹中(具有特定日期的名称)。
示例文件:
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文件保存到另一个文件夹名称。
答案 0 :(得分:5)
也许:
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));
答案 1 :(得分:1)
肯定有办法。查看Path和Directory类,以迭代文件和目录以及创建新文件和目录。一旦你进入文件夹,一些简单的谷歌搜索应该能够显示如何读取文件的修改日期然后你只需要将它们排队以便写入你的新位置。如果您对此感到困惑并尝试发布一些代码并展示您的一些努力,请告诉我们。通常人们会更好,并且少投票给你:)
答案 2 :(得分: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
的特定目录
注意:您无法创建包含无效字符的目录,例如/
,\
,?
,:
,{{ 1}}等等...这意味着您无法创建名为*
谢谢, 我希望你觉得这很有帮助:)