2016-04-10 25 views
1

如何返回具有不同值的多个阵列?在我的第一个函数中,我得到了我的文件夹中的所有文件。返回具有不同值的多个阵列

在我的第二个函数中,我为每个文件提取“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; 
    } 
} 

或者如果你的文件名是每个唯一的,你想要ED使访问它们更容易一点,你可以将它们存储在一个字典,它会让你通过它的名称来查找每一个高达:

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

}

然后,如果你想访问信息从字典中的文件中,您可以简单地使用:

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

谢谢!我认为它有效..:P我如何从列表中获得价值? – Cryrexon

+0

您可以使用循环遍历它,也可以使用'yourList.ElementAt(index)'来提取特定的索引。另外,如果你只想返回一个数组数组,你可以将你的方法的返回类型改为'string [] []',只要将'return fileInformation'改为'return fileInformation.ToArray()',那么你就可以通过它们的索引来引用你的值(就像你在任何其他数组中)。 –

+0

我有我的foreach循环foreach(var file in fileInformaton)'现在我想从数组中获取信息到另一个列表'var list = new Mod {isModEnabled = true,modTitle = file [] []};'我怎样才能得到它们?对不起,我是一个初学者:] – Cryrexon

相关问题