C#使用GetFiles返回完整路径 [英] C# return full path with GetFiles

查看:774
本文介绍了C#使用GetFiles返回完整路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用此代码搜索目录中的文件:

Use this code for search files in directory:

FileInfo[] files = null;
string path = some_path;
DirectoryInfo folder = new DirectoryInfo(path);
files = folder.GetFiles("*.*", SearchOption.AllDirectories);

这仅返回文件名和扩展名(text.exe).如何返回文件的完整路径(C:\ bla \ bla \ bla \ text.exe)?

This return only filename and extension (text.exe). How to return full path to file(C:\bla\bla\bla\text.exe)?

如果我使用Directory.GetFiles("*.*"),则返回完整路径.但是,如果文件夹包含名称中的指向点(C:\ bla \ bla \ test.0.1),则结果包含不带文件的文件夹的路径:

If I use Directory.GetFiles("*.*"), this return full path. But if folder contains point in name(C:\bla\bla\test.0.1), result contains path to folder without file:

  • 0 C:\ bla \ bla \ bla \ text.exe
  • 1 C:\ bla \ bla \ test.0.1
  • 2 C:\ bla \ text.exe

推荐答案

FileInfo包含FullName属性,您可以使用该属性来检索文件的完整路径

FileInfo contains a FullName property, which you can use to retrieve full path to a file

var fullNames = files.Select(file => file.FullName).ToArray();

检查

此代码在我的计算机上:

Check

This code on my machine:

FileInfo[] files = null;
string path = @"C:\temp";
DirectoryInfo folder = new DirectoryInfo(path);
files = folder.GetFiles("*.*", SearchOption.AllDirectories);

//you need string from FileInfo to denote full path
IEnumerable<string> fullNames = files.Select(file => file.FullName);

Console.WriteLine ( string.Join(Environment.NewLine, fullNames ) );

打印

C:\temp\1.dot 
C:\temp\1.jpg 
C:\temp\1.png 
C:\temp\1.txt 
C:\temp\2.png 
C:\temp\a.xml 
...

完整解决方案

您的问题的解决方案可能看起来像这样:

Full solution

The solution to your problem might look like this:

string path = @"C:\temp";
DirectoryInfo folder = new DirectoryInfo(path);
var directories = folder.GetDirectories("*.*", SearchOption.AllDirectories);


IEnumerable<string> directoriesWithDot = 
 directories.Where(dir => dir.Name.Contains("."))
            .Select(dir => dir.FullName);


IEnumerable<string> filesInDirectoriesWithoutDot = 
 directories.Where(dir => !dir.Name.Contains("."))
            .SelectMany(dir => dir.GetFiles("*.*", SearchOption.TopDirectoryOnly))
            .Select(file => file.FullName);


Console.WriteLine ( string.Join(Environment.NewLine, directoriesWithDot.Union(filesInDirectoriesWithoutDot) ) );

这篇关于C#使用GetFiles返回完整路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆