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个字符,不是吗?但我同意你的看法,在他的基本样本中,这个答案应该有效