如何获取近似文件路径?

时间:2014-08-04 14:51:35

标签: c# linq

我有一个列表文件路径如下:

C:\Data\Default.aspx
C:\Data\Global.asax
C:\Data\Web.config
C:\Data\bin\PerlsComWebProject1.dll
C:\Data\bin\PerlsComWebProject1.pdb

我有一个从文件夹路径获取文件的方法,但是我想打印结果如下:

Data\Default
Data\Global
Data\Web.config
Data\bin\PerlsComWebProject1
Data\bin\PerlsComWebProject1

致电:GetFilePathWithOutExtention(@"C:\\Data");

我的代码只是没有扩展名的返回文件。

void GetFilePathWithOutExtention(string path)
{
    string[] paths = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
    foreach(var path in paths)
    {
        Console.WriteLine(Path.GetFileNameWithoutExtension(path));
    }
}

更新:感谢您的评论。 " C:\数据\"只是一个样本,抱歉让你困惑。实际上,我有一个任何文件夹,我想搜索这个文件夹,得到近似路径:这个文件夹... \文件名没有延伸。

例如:我有一条路径如下:D:\ EHO \ Phase1 \ Data \ Document \ text.txt,....当我调用方法时:GetFilePathWithOutExtention(" D:\ EHO \ Phase1&#34 ;),我想输出:Phase1 \ Data \ Document \ text,或GetFilePathWithOutExtention(" D:\ EHO \ Phase1 \ Data"),输出:Data \ Document \ text。

感谢。

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是Uri.MakeRelativeUri

所以你可以这样做:

  var folder = new Uri(@"C:\Data");
  var paths = System.IO.Directory.GetFiles(folder.LocalPath, "*.*", System.IO.SearchOption.AllDirectories);
  foreach (var uri in paths.Select(p => new Uri(p)))
  {
    Console.WriteLine(folder.MakeRelativeUri(uri).ToString());
  }

打印

Data/Default.aspx
Data/Global.asax
Data/Web.config
Data/bin/PerlsComWebProject1.dll
Data/bin/PerlsComWebProject1.pdb

答案 1 :(得分:0)

你可以从第4个字母中显示

void GetFilePathWithOutExtention(string path)
{
    string[] filesName = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
    foreach(var fileName in filesName)
     {
         string pathToWrite = Path.GetFileNameWithoutExtension(fileName);
         if(pathToWrite != null && pathToWrite.length >3 )
           Console.WriteLine(pathToWrite.Substring(3,pathToWrite.length);
     }
}

答案 2 :(得分:0)

一般答案,对机器驱动器内的所有文件夹都有效,而不仅仅是第一级:

void GetFilePathWithOutExtention(string path)
{
    // Get the name of the folder containing your path (for further remove in the items folder)
    string parentFolderName = Directory.GetParent(path).FullName;

    string[] filePaths = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
    foreach(string fileItemPath in filePaths)
    {
        // Get the current folder without the initial folder path
        string currentItemPath = Path.GetDirectoryName(fileItemPath).Remove(0, parentFolderName.Length);
        Console.WriteLine(Path.Combine(currentItemPath, Path.GetFileNameWithoutExtension(fileItemPath)));
    }
}