我想這個功能,去無限循環,從一個文件夾中的所有文件,並以文件的相對子文件夾複製到另一個位置:避免定製複製目錄功能複製文件夾時爲自己
using System.IO;
private static bool CopyDirectory(string SourcePath, string DestinationPath, bool overwriteexisting)
{
bool ret = true;
try
{
SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\";
DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\";
if (Directory.Exists(SourcePath))
{
if (Directory.Exists(DestinationPath) == false)
Directory.CreateDirectory(DestinationPath);
foreach (string fls in Directory.GetFiles(SourcePath))
{
FileInfo flinfo = new FileInfo(fls);
flinfo.CopyTo(DestinationPath + flinfo.Name, overwriteexisting);
}
foreach (string drs in Directory.GetDirectories(SourcePath))
{
DirectoryInfo drinfo = new DirectoryInfo(drs);
if (CopyDirectory(drs, DestinationPath + drinfo.Name, overwriteexisting) == false || drs.Substring(drs.Length-8) == "archive")
ret = false;
}
}
else
{
ret = false;
}
}
catch (Exception e)
{
Console.WriteLine("{0} {1} {2}", e.Message, Environment.NewLine + Environment.NewLine, e.StackTrace);
ret = false;
}
return ret;
}
它工作良好,直到你必須將文件夾複製到另一個位置,但是當你必須自己創建一個文件夾時(在我的例子中,我正在做一個名爲「archive」的子文件夾來跟蹤最後一次文件夾文件的變化)在無限循環中,因爲它在Directory.GetDirectories foreach循環中不斷重新掃描,找到新創建的子文件夾並反覆嵌套相同的子文件夾,直到它達到「路徑名太長max 260 charachters limit例外」。
我試圖通過使用條件
,以避免它|| drs.Substring(drs.Length-8)==「archive」)
它應該檢查目錄名稱,但它似乎不起作用。
我認爲,不同的解決方案,如把最大子文件夾深度掃描(I.E最大2子文件夾),所以它不會重新掃描所有嵌套的文件夾,但我無法在目錄對象中找到這樣的屬性。
我無法將整個事物複製到臨時文件夾,然後進入實際文件夾,因爲下次掃描它時,它也會重新掃描存檔文件夾。
我把所有的目錄列表放在Directory對象的ArrayList中,所以也許我可以檢查像DirName這樣的東西,但我不知道這樣的屬性是否存在。
任何解決方案?
子之前已經嘗試過,沒有運氣。即使比較從調試器獲得的確切字符串值也不會導致結果。 –