2016-04-10 27 views
1

Farklı Değerlere sahip birden fazla Diziyi nasıl iade edebilirim? İlk işlevimde Klasörümdeki tüm dosyaları alıyorum.Farklı Değerlere sahip birden fazla dizi döndürme

İkinci işlevimde, her dosya için "modDesc.xml" dosyasını alıyorum ve Bilgilerimi bunun dışına çıkartıyorum. Şimdi her dosya için tüm bu bilgileri içeren bir dizi dönmek istiyorum! Ama nasıl olduğunu bilmiyorum .. Umarım birileri bana yardım edebilir!

public string[] openDirectory(string DirectoryPath) 
{ 
    string[] files = Directory.GetFiles(DirectoryPath, "*.zip"); 

    return files; 
} 


public string[] getModDesc(string DirectoryPath) 
{ 
    string[] files = openDirectory(DirectoryPath); 

    foreach (var file in files) 
    { 
     using (ZipFile zip = ZipFile.Read(file)) 
     { 
      ZipEntry modDescHandler = zip["modDesc.xml"]; 

      if (modDescHandler != null) 
      { 
       if (File.Exists("tmp\\modDesc.xml")) 
       { 
        File.Delete("tmp\\modDesc.xml"); 
       } 

       modDescHandler.Extract("tmp"); 

       XDocument modDesc = XDocument.Load("tmp\\modDesc.xml"); 
       string modTitle = null; 
       string modAuthor = null; 
       string modVersion = null; 
       string modFileName = null; 

       try 
       { 
        modTitle = modDesc.Element("modDesc").Element("title").Element("de").Value; 
        modAuthor = modDesc.Element("modDesc").Element("author").Value; 
        modVersion = modDesc.Element("modDesc").Element("version").Value; 
       } 

       catch 
       { 

       } 

       modFileName = Path.GetFileName(file); 

       string[] modInformation = { modTitle, modAuthor, modVersion, modFileName }; 

       File.Delete("tmp\\modDesc.xml"); 

       return modInformation; 

      } 
     } 
    } 

    return new string[0]; 
} 

cevap

1

Bir List<string[]> (Dizilerin yani bir liste) geri dönebilirler her dosya için Dizilerin koleksiyonunuzu içerecektir:

İşte

benim kodudur
public List<string[]> getModDesc(string DirectoryPath) 
{ 
     // Create a list to store your arrays 
     List<string[]> fileInformation = new List<string[]>(); 

     // Get your files 
     string[] files = openDirectory(DirectoryPath); 
     foreach (var file in files) 
     { 
       using (ZipFile zip = ZipFile.Read(file)) 
       { 
        // All your code (omitted for brevity) 

        // Create your array for this file 
        string[] modInformation = { modTitle, modAuthor, modVersion, modFileName }; 

        // Add this to your list 
        fileInformation.Add(modInformation); 
       } 
     } 
     // At this point your arrays collection should have all of your 
     // arrays, so return it 
     return fileInformation; 
    } 
} 

Veya dosya adlarınız benzersizdi ve isterseniz Bu bilgilere ulaşmak istiyorsa,

Sonra

public Dictionary<string,string[]> getModDesc(string DirectoryPath) 
{ 
    // Create a list to store your arrays 
    Dictionary<string,string[]> fileInformation = new Dictionary<string,string[]>(); 

    // Get your files 
    string[] files = openDirectory(DirectoryPath); 
    foreach (var file in files) 
    { 
      using (ZipFile zip = ZipFile.Read(file)) 
      { 
       // All your code (omitted for brevity) 

       // Create your array for this file 
       string[] modInformation = { modTitle, modAuthor, modVersion, modFileName }; 

       // Add this to your dictionary, mapping the file name 
       // to it's information 
       fileInformation.Add(modFileName,modInformation); 
      } 
    } 
    // At this point your dictionary should have all of your 
    // arrays, so return it 
    return fileInformation; 
} 

}: ed onlara biraz daha kolay erişmesini sağlamak için, size o ismi Her birini aramak için izin verecek bir Sözlükte bunları depolayabilir Sözlüğünüzdeki bir dosyadan, aşağıdakileri kullanabilirsiniz:

string[] information = yourDictionary["YourFileName"]; 
+0

Teşekkür ederiz! Bence işe yarıyor ..: P Listeden değeri nasıl alabilirim? – Cryrexon

+0

Bir döngü kullanarak bunu yineleyebilir veya belirli bir dizini çekmek için 'yourList.ElementAt (index)' komutunu kullanabilirsiniz. Ayrıca, bir dizi diziyi geri döndürmek isterseniz, yönteminizin dönüş türünü 'string [] []' olarak değiştirebilir ve sadece 'fileInformation' dönüşünü fileInformation.ToArray()' i döndürerek değiştirebilirsiniz. indekslerine göre referans verirsiniz (diğer dizilerdeki gibi). –

+0

Benim foreach döngüsüm var foreach (fileInformaton içinde var dosya) 've şimdi diziden bilgileri başka bir listeye almak istiyorum' var list = new Mod {isModEnabled = true, modTitle = dosya [] []}; ' Onları nasıl alabilirim? Üzgünüm, yeni başlayan biriyim:] – Cryrexon

İlgili konular