Попытка переместить файлы из одной папки в другую с помощью подпапок C#

Я хочу реорганизовать все фотографии из одной папки в подпапки другого пути, где я хочу создать новые подпапки, названные с датами создания файла.

Пример:

photo1.png (дата создания 12.02.2015)

photo2.png (дата создания 12.02.2015)

photo3.png (дата создания 13.02.2015)

-> создать две подпапки: "12-Фев-2015" с photo1.png и photo2.png и "13-Фев-2015" с photo3.png

Я написал код для копирования фотографий в другую папку и создаю подпапку с текущей датой. Но я не знаю, как создать подпапки, названные в честь даты создания файлов.

public class SimpleFileCopy
{
    static void Main(string[] args)
    {
        // Specify what is done when a file is changed, created, or deleted.
        string fileName = "*.png";
        string sourcePath = @"C:\tmp";
        string targetPath = @"U:\\";

        // Use Path class to manipulate file and directory paths.
        string sourceFile = Path.Combine(sourcePath, fileName);
        //string destFile = Path.Combine(Directory.CreateDirectory("U:\\" + DateTime.Now.ToString("dd-MMM-yyyy") , fileName);

        // To copy a folder's contents to a new location:
        // Create a new target folder, if necessary.
        if (!Directory.Exists("U:\\" + Directory.CreateDirectory("U:\\" + DateTime.Now.ToString("dd-MMM-yyyy"))))

        {
            Directory.CreateDirectory("U:\\" + Directory.CreateDirectory("U:\\" + DateTime.Now.ToString("dd-MMM-yyyy")));
        }
        else
        // To copy a file to another location and 
        // overwrite the destination file if it already exists.
        {

            foreach (var file in new DirectoryInfo(sourcePath).GetFiles(fileName))
            {
                try
                {
                    file.CopyTo(e.FullPath.Combine(targetPath + Directory.CreateDirectory("U:\\" + DateTime.Now.ToString("dd-MMM-yyyy")), file.Name));
                }
                catch { }
            }
        }
    }
}

1 ответ

Решение

У вас есть путь ко многим Directory.CreateDirectory звонки. Просто перечислите файлы исходной папки, а затем получите дату с file.CreationTime, вызов Directory.CreateDirectory (независимо от того, существует ли он уже), а затем скопируйте файл.

string fileName = "*.png";
string sourcePath = @"C:\tmp";
string targetPath = @"U:\";

foreach (var file in new DirectoryInfo(sourcePath).GetFiles(fileName))
{
    var targetFolderName = file.CreationTime.ToString("dd-MMM-yyyy");
    var dir = Directory.CreateDirectory(Path.Combine(targetPath, targetFolderName));
    file.CopyTo(Path.Combine(dir.FullName, file.Name), true);
}
Другие вопросы по тегам