以递归方式遍历目录并处理相对路径

时间:2015-09-07 09:07:48

标签: c# .net

我有一个文本文件,其中包含指向带路径的不同文本文件的路径,依此类推。像这样:

IEnumerable<string> ExtractAllPathsFromFile(string path) { ... } 

void PrintAllPaths(string root)
{
      var paths = ExtractAllPathsFromFile(root);

      foreach (path in paths)
      {
         Console.WriteLine(path);
         if (File.Exists(path))
            PrintAllPaths(path);
      }
}



PrintAllPaths(root:C:\folder1\dirs1.txt);

我需要遍历所有文件并打印出来,这很简单:

protected string UserId { get { return User.Identity.GetUserId(); } }

但正如您在示例中所看到的,所有路径都是相对的(非绝对路径),我需要提出如何在算法中处理它的想法。

3 个答案:

答案 0 :(得分:3)

使用 SELECT COUNT(DISTINCT Test_Result) as 'Total' ,COUNT(DISTINCT CASE WHEN Test_Result='Pass' THEN serial_no END) AS 'Passed' ,COUNT(DISTINCT CASE WHEN Test_Result='Fail' THEN serial_no END) AS 'Failed' FROM [Optima_Test_Results].[dbo].[Optima PreChamber Test] WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, Created_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 方法安全地连接多个路径。您可以使用Path.Combine()方法从C:\folder1\dirs1.txt获取目录路径。不会有这样的工作吗?

Path.GetDirectoryName()

答案 1 :(得分:1)

呃,这样的事情?

  String path = null;

  var files = File
    .ReadLines(@"C:\MyFiles.txt")
    .Select(line => {
      if (Path.IsPathRooted(line)) {
        path = Path.GetDirectoryName(line);

        return line;
      }
      else
        return  Path.Combine(path, line.Trim());
    });
...

Console.WriteLine(String.Join(Environment.NewLine, files));

答案 2 :(得分:0)

可能你的意思是:

IEnumerable<string> ExtractAllPathsFromFile(string path) 
{  
  var basePath = Path.GetDirectoryName( path );
  return File.ReadAllLines(path).Select (f => Path.Combine(basePath, f.Trim()));
}