检索单个文件和Directory.GetFiles C#的行为

时间:2013-06-17 21:21:22

标签: c# arrays string file-io

public int RunStageData(string rootDirectory, stringdataFolder)
{
    string[] files = new string[] { };
    files = Directory.GetFiles(rootDirectory + dataFolder);
    string[] tableOrder = new string[] { };
    tableOrder = Directory.GetFiles(@"C:\_projects\ExampleProject\src", "TableOrder.txt");
    System.IO.StreamReader tableOrderReader = new System.IO.StreamReader(tableOrder[0]);

    for (int count = 0; count < files.Length; count++)
                    {
                        string currentTableName =tableOrderReader.ReadLine();
                        //files[count] = Directory.GetFiles(@"C:\_projects\ExampleProject\src", currentTableName);
                    }

}

大家好,很抱歉,如果我的代码有点草率。我的问题主要是我已经注释掉的那一行。所以基本上我在这里要做的是根据txt文件中这些名称的顺序填充文件名的字符串数组。所以我从txt文件中读取第一行,然后在目录中检索该文件的名称(假设它存在)并将其放在数组的第一个位置,然后继续。

例如,如果txt文件按以下顺序包含这些单词:

  1. 绵羊
  2. 我希望阵列首先是Dog,然后是Sheep,然后是Cat。我的问题是我评论过的行给了我一个错误,上面写着“错误41无法隐式转换类型'string []'到'string'”


    我猜这是因为Directory.GetFiles有可能返回多个文件。那么,我可以使用另一种方法来实现我正在寻找的结果吗?谢谢。

3 个答案:

答案 0 :(得分:1)

我假设您想要文件的内容(如果您只想要文件名并需要检查是否存在,则需要使用不同的解决方案。)

files[count] = File.ReadAllText(Path.Combine(@"C:\_projects\ExampleProject\src", currentTableName));

还有其他一些建议:

  • 请勿使用虚假数据初始化您的变量,= new string[] {}可以删除
  • 不要使用count作为索引器,它会让人感到困惑(毕竟count是数组的属性)
  • 加入路径时使用Path.Combine。它为您处理\会容易得多。

答案 1 :(得分:0)

如果您的阵列文件仅包含路径,则可以执行以下操作:

path = @"C:\_projects\ExampleProject\src\" + currentTableName;
If(File.Exists(path))
{
files[count] = path;
}

答案 2 :(得分:0)

从你的问题:

  

所以基本上我在这里要做的就是填充一个字符串数组   文件名基于txt文件中这些名称的顺序。所以我   从txt文件中读取第一行,然后检索其名称   文件在目录中(假设它存在)并将其放在第一个位置   数组,然后继续。

因此,您的TableOrder.txt已按正确顺序包含文件,因此您可以这样做:

string[] files = File.ReadAllLines(@"C:\_projects\ExampleProject\src\TableOrder.txt")