2016-06-17 5 views
2

В настоящее время я пытаюсь создать программу, которая должна скопировать структуру папок в каталог.Скопировать файл в другую структуру папки

Вот пример:
C:\test1\folder\folder\file.txt должен закончиться в C:\test2\folder\folder\file.txt

У меня есть List<FileSystemInfo для Source-папки, и теперь мне нужно скопировать файлы и создавать папки, как в примере.

Я хотел бы сделать это без pathname-strings из-за имени файла - ограничение 260 символов.

У меня есть этот код, чтобы скопировать файлы с: именами путями

string destFile = BackupOptions.DestinationFolder + sourceFileInfo.FullName; 
string destParent = Directory.GetParent(destFile).FullName; 
string backupFolder = destParent + @ "\backupFolder"; 
try { 
while (!Directory.Exists(destParent)) { 
    if (!Directory.Exists(destParent)) { 
    Directory.CreateDirectory(destParent); 
    } 
} 
FileAttributes fileAttributes = sourceFileInfo.Attributes; 
if ((fileAttributes & FileAttributes.Directory) == FileAttributes.Directory) { 
    Directory.CreateDirectory(destFile); 
} else { 
    FileInfo file = (FileInfo) sourceFileInfo; 
    file.CopyTo(destFile, true); 
} 
} catch (Exception e) { 
Console.Write(e.Message); 
return false; 
} 

ли кто-то знает, как скопировать файл/каталог только с FileSystemInfo-объектом этого файла/объект?

ответ

1

Я не думаю, что ни один из классов .NET IO поддерживает длинные пути прямо сейчас. Вокруг этого я не знаю. В период выполнения .NET 4.0 команда сделала публичную попытку добавить это, но никогда не приземлилась.

Используйте поисковую систему, чтобы найти библиотеку, которая добавляет это. Библиотека внутренне использует PInvoke (который, конечно, вы можете использовать напрямую при меньшем удобстве). Я думаю, что AlphaFS - известное имя.

Вы можете упростить свой код: Directory.CreateDirectory создает несколько уровней одновременно и не сработает, если каталог уже существует. Это почти всегда то, что вам нужно.

затем использовать его со строкой родительской папки объекта и создать каталог в папке назначения

Не 100% уверен, что вы имеете в виду, но это вполне может быть верно :)