2016-04-07 32 views
-1

Bir dizini yapısını olduğu gibi tutarak kopyala/yapıştır yordamı olarak taşımak istiyorum. Ben sadece bir klasör içindeki tüm alt klasörlerdeki dosyaları aramıyorum ve onları kopyala/yapıştır (this çözümü olarak), bunun yerine klonunu klonlamak istiyorum ve yapısını olduğu gibi tut (Tree -> alt klasörler ve dosyalar) tıpkı bir kopya ve yapıştırma rutini gibi. Tüm bir dizini yinelemeli olarak yeni bir yola kopyalayıp yapıştırın.

yüzden this işlevi bulundu kopyalayan yeni bir yol dosyaların dolu bir klasörü:

Klasör -> Dosya (lar) kopyala/yapıştır olarak bilinen işlev davranır

rutin. SourceWathExisting için SourcePath, DestinationPath ve boolean değerini alır. Güzel ve küçük ama çok kötü, o sorunun gerçek cevabı olarak işaretlenmedi (bir oran tavsiye eder).

Peki ya bütün dizini taşımak istersem? Başka bir deyişle, dosya ve klasörlerdeki klasörlerin klasörlerini içeren bir klasörüm varsa ne olur? Ve belki de bilinmemektedir böyle dosya yapısı ağacı boyutu:

Klasör -> Klasör (ler) -> ... -> Klasör (ler) -> Dosya (lar)

ben klasörleri olan bir klasörü kopyalamak/yapıştırmak için aşağıdaki rutini kullanıyorum.

foreach (var Folder in DestinationFolder) // here I know that I have only one level of folders to reach the files 
{ 
    CopyDirectory(FolderPath, DestinationPath, false); // use that function to copy the files 
} 

Bu yukarıdaki fonksiyon bu dizin yapısı vermektedir: Ama burada ben sadece klasörlerden biri düzeyine sahip tek foreach döngüsü gereklidir böylece biliyoruz -> Klasör (ler) -

Klasör> Dosya (lar)

this'u denedim ve istediğimi yapmadım. Tüm dosyaları yalnızca tüm alt klasörleri ararken alırım. İstediğim şey bu değil. Alt klasörleri ve orijinal yapıyı olduğu gibi tutmak istiyorum. Burada alt dizinler, alt klasörler, alt klasörler, dosyalar gibi yapılandırılmış dizin yerine dört dosya alıyorum. Sadece dördü, çünkü bunların hepsine ihtiyacım olduğu için bunun olmasını istemediğim kopyaları çıkarır. İşte

benim şimdiki yapıdır (ama benim sorum herhangi bir dizine geneldir):

Klasör -> Klasörler -> Klasörler + Dosyalar

İşte

Aşağıdaki kod içinde yaptığı iştir yeni yol:

NewFolder -> AllFilesFoundInAnySubfolder

Tüm dizini bilinmeyen bir boyuta taşımak ve yapısını olduğu gibi tutmak nasıl? Sadece bir dizinden dosya almayın ve onları taşıyın!

+0

olsun ve nasıl başka bir yere yinelemeli bir dizin kopyalama farklıdır olacak? Ayrıca, bazı kodları lütfen yapıştırın. Ne denedin? – Zuzlx

+0

Bağlantılı sorunuzun iki yeniden oy hakkı var. Sabırlı olun ve bu gönderinin ** gerçek bir kopyasını göndermenin yerine tekrar açılmanın vaktini verin. Bu bir anlık tatmin * sitesi değildir; Hemen cevap alamazsınız ve tekrar tekrar yayınlarsanız yardımcı olmaz. –

+0

People * do * oraya git. Bir gözden geçirme sırası vardır, bu da iki yeniden oylama hakkınızdır. Ve Zuxlx'e anlattığınız gerçeği "soruya * bakıp neyi denediğimi göreceksin * bunun zaten bir çift olduğunu bildiğini göster. (Ve bir şeyi açıklığa kavuşturmak için, * kopyala/yapıştır * kullanıcının ne yaptığı Windows Gezgini Programlama çözümleri * kopyalama/yapıştırma yapmaz *; kod, dizin oluşturur ve dosyaları kopyalar.) –

cevap

5

Burada bir dizini başka bir hedef dizine yinelemeli olarak klonlayacak bir örnek.Gelecekte, şimdiki soruya çalıştık ne ekleyerek size `Bu bağlamda anlamına clone` neyi daha iyi tepkiler

class Program 
{ 
    static void Main(string[] args) 
    { 
     CloneDirectory(@"C:\SomeRoot", @"C:\SomeOtherRoot"); 
    } 

    private static void CloneDirectory(string root, string dest) 
    { 
     foreach (var directory in Directory.GetDirectories(root)) 
     { 
      string dirName = Path.GetFileName(directory); 
      if (!Directory.Exists(Path.Combine(dest, dirName))) 
      { 
       Directory.CreateDirectory(Path.Combine(dest, dirName)); 
      } 
      CloneDirectory(directory, Path.Combine(dest, dirName)); 
     } 

     foreach (var file in Directory.GetFiles(root)) 
     { 
      File.Copy(file, Path.Combine(dest, Path.GetFileName(file))); 
     } 
    } 
} 
+0

Bu benim aradığım şeydir.Bu tam olarak istediğim şeyi yaptı. yeni bir klasöre bağlantı Teşekkürler! –

+0

Denediğimi ekledim. Teşekkürler :) –

İlgili konular