2012-11-12 48 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

謝謝,
我希望對您有所幫助:)

相關問題