2016-04-10 14 views
1

異なる値を持つ複数の配列を返すにはどうすればよいですか?私の最初の機能では、私のフォルダにあるすべてのファイルを取得します。異なる値を持つ複数の配列を返す

私の2番目の機能では、各ファイルに対して "modDesc.xml"を抽出し、自分の情報を取得します。今私はすべてのこれらの情報を持つ配列の各ファイルを返すしたい!しかし、私は知らないどのように..私は誰かが私を助けることを願っています!

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]; 
} 

答えて

1

あなたはList<string[]>(配列のすなわちリスト)を返すことができ、各ファイルのための配列のコレクションが含まれます:

ここ

は私のコードです
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; 
    } 
} 

また、ファイル名がそれぞれ固有のものであった場合は、あなたが情報にアクセスしたい場合は、

その後

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は彼らに少し簡単にアクセスするために、あなたはそれの名前で各1を検索することが可能になる辞書に格納することができあなたの辞書のファイルから、次のように簡単に使用できます:

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

ありがとう!私はそれが動作すると思う..:Pどのようにリストから値を得ることができますか? – Cryrexon

+0

ループを使って反復するか、 'yourList.ElementAt(index)'を使って特定のインデックスを取得することができます。さらに、配列の配列を返すだけなら、メソッドの戻り値の型を 'string [] []'に変更し、 'return fileInformation'を' return fileInformation.ToArray() 'に変更することができます。他の配列と同じように、インデックスで値を参照します。 –

+0

私は自分のforeachループ 'foreach(fileInformaton内のファイル)'を持っていて、今は配列から別のリストに情報を得たいと思います 'var list = new Mod {isModEnabled = true、modTitle = file [] []};'どうすれば入手できますか?申し訳ありません私は初心者です:] – Cryrexon