C# 如何获得近似的文件路径?

C# 如何获得近似的文件路径?,c#,linq,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\Web.config 数据\bin\PerlsComWebProject1 数据\bin\P

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

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\Web.config
数据\bin\PerlsComWebProject1
数据\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:\Data\”只是一个示例,很抱歉让您感到困惑。实际上,我有一个任意文件夹,我想搜索这个文件夹,得到大致路径:这个文件夹…\filename,不带扩展名

例如:我有一个如下路径:D:\EHO\Phase1\Data\Document\text.txt,…。当我调用方法:GetFilePathWithOutExtention(“D:\EHO\Phase1”)时,我想输出:Phase1\Data\Document\text,或者GetFilePathWithOutExtention(“D:\EHO\Phase1\Data”),输出:Data\Document\text


谢谢。

您可以从第四个字符开始显示

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

通用答案,适用于机器驱动器内的所有文件夹,而不仅仅是第一级:

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

我想你要找的是
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

只需删除
C:
方法后的
GetFileNameWithoutExtension
部分?您的逻辑是什么?我找不到您提到的
Data\Web.config
输出的有效逻辑,因为
path
是一个
string
您可以只写
path。子字符串(2)
更好的方法是删除his的
path
变量的父路径method@SonerGönül:Remove C:这不是一个好的解决方案,我有一条路,例如:D:\EHO\Phase1\Data\Document\text.txt他的路径超过2个字符和/或超过1个文件夹?(还有你错拼了长度)@NicolasR这段代码将从第4个字符写到字符串的末尾,然后是所有文件夹,子字符串只删除“c:\”我知道。但如果用户在类似
C:\myFolder
的文件夹中查找,则会受到限制。使用variableNicolas中的路径,一个更通用的方法会更好,您指的是哪条路径?Akrem,我认为这和OPs代码不会编译,因为您正在重新分配
path
变量(foreach和method参数)Sayse:参见我的答案:我认为使用
C:\Folder1\MyRequestFolder
参数调用方法也是有效的,这是一种更好的方法。如果我是对的,OP说他想得到他样本中与当前文件夹相关的所有文件,
Data
,但是如果is-sample是
C:\Folder1\Data
?我们不能只删除前3个字符,不是吗?但我同意你的看法,在他的基本样本中,这个答案应该有效