C# 如何通过部分名称c查找文件夹和文件#
在硬盘的一个特定文件夹中,我存储了许多其他子文件夹和文件。现在我想按部分名称列出这些文件夹和文件的名称C# 如何通过部分名称c查找文件夹和文件#,c#,C#,在硬盘的一个特定文件夹中,我存储了许多其他子文件夹和文件。现在我想按部分名称列出这些文件夹和文件的名称 for example -------------- c webapi xx folder c mvctutorial xx folder done webapi xx folder webapi done folder webapi.zip file mvc.iso file
for example
--------------
c webapi xx folder
c mvctutorial xx folder
done webapi xx folder
webapi done folder
webapi.zip file
mvc.iso file
现在,当我喜欢按部分名称webapi搜索时,我想得到包含webapi单词的文件和文件夹名称列表。我想在网格中显示他们的完整文件夹或文件名及其完整路径和大小。就像下面这样
Name Type location Size
----- ------ --------- -------
c webapi xx folder c:\test1 2 KB
c mvctutorial xx folder c:\test3 3 KB
done webapi xx folder c:\test1 11 KB
webapi done folder c:\test1 9 KB
webapi.zip file c:\test1 20 KB
mvc.iso file c:\test4 5 KB
我得到了一个查找文件的示例代码,但下面的代码可能找不到文件夹。因此,我正在寻找一个样本代码,将发现文件和文件夹太多。所以请引导我解决我的问题
下面的示例代码将查找文件,但不确定是否按部分名称查找文件。这是代码。我不是在开发环境之前。因此无法测试以下代码
查找文件代码
DirectoryInfo
中还有一个方法:
static void Main(string[] args)
{
string partialName = "webapi";
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"c:\");
FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + partialName + "*.*");
DirectoryInfo[] dirsInDir = hdDirectoryInWhichToSearch.GetDirectories("*" + partialName + "*.*");
foreach (FileInfo foundFile in filesInDir)
{
string fullName = foundFile.FullName;
Console.WriteLine(fullName);
}
foreach (DirectoryInfo foundDir in dirsInDir )
{
string fullName = foundDir.FullName;
Console.WriteLine(fullName);
}
}
如果只需要全名,可以使用更通用的类型“FileSystemInfo”
static void Main(string[] args)
{
string partialName = "webapi";
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"c:\");
FileSystemInfo[] filesAndDirs = hdDirectoryInWhichToSearch.GetFileSystemInfos("*" + partialName + "*");
foreach (FileSystemInfo foundFile in filesAndDirs)
{
string fullName = foundFile.FullName;
Console.WriteLine(fullName);
}
}
编辑:
如果需要专用类型的方法,仍然可以在for each循环中强制转换为该方法:
foreach (FileSystemInfo foundFile in filesAndDirs)
{
string fullName = foundFile.FullName;
Console.WriteLine(fullName);
if (foundFile.GetType() == typeof(FileInfo))
{
Console.WriteLine("... is a file");
FileInfo fileInfo = (FileInfo)foundFile;
Console.WriteLine("Extension: " + fileInfo.Extension);
}
if (foundFile.GetType() == typeof(DirectoryInfo))
{
Console.WriteLine("... is a directory");
DirectoryInfo directoryInfo = (DirectoryInfo)foundFile;
FileInfo[] subfileInfos = directoryInfo.GetFiles();
}
}
这里有一个使用递归函数列出给定目录中所有文件的示例代码。只需为文件夹名称和文件名称使用方法编写比较部分 这是上面链接中给出的代码
// For Directory.GetFiles and Directory.GetDirectories
// For File.Exists, Directory.Exists
using System;
using System.IO;
using System.Collections;
public class RecursiveFileProcessor
{
public static void Main(string[] args)
{
foreach(string path in args)
{
if(File.Exists(path))
{
// This path is a file
ProcessFile(path);
}
else if(Directory.Exists(path))
{
// This path is a directory
ProcessDirectory(path);
}
else
{
Console.WriteLine("{0} is not a valid file or directory.", path);
}
}
}
// Process all files in the directory passed in, recurse on any directories
// that are found, and process the files they contain.
public static void ProcessDirectory(string targetDirectory)
{
// Process the list of files found in the directory.
string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries)
ProcessFile(fileName);
// Recurse into subdirectories of this directory.
string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
foreach(string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory);
}
// Insert logic for processing found files here.
public static void ProcessFile(string path)
{
Console.WriteLine("Processed file '{0}'.", path);
}
}
正如其他人所说,使用
DirectoryInfo.GetDirectories
和DirectoryInfo.GetFiles
方法,但记住使用SearchOptions.AllDirectories
递归搜索子目录
try
{
const string searchQuery = "*" + "keyword" + "*";
const string folderName = @"C:\Folder";
var directory = new DirectoryInfo(folderName);
var directories = directory.GetDirectories(searchQuery, SearchOption.AllDirectories);
var files = directory.GetFiles(searchQuery, SearchOption.AllDirectories);
foreach (var d in directories)
{
Console.WriteLine(d);
}
foreach (var f in files)
{
Console.WriteLine(f);
}
}
catch (Exception e)
{
//
}
我从一个答案示例代码中提取完整代码。所以我想在这里发布完整的代码
namespace PatternSearch
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private long GetDirectorySize(string folderPath)
{
DirectoryInfo di = new DirectoryInfo(folderPath);
return di.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}
private void btnSearch_Click(object sender, EventArgs e)
{
List<FileList> oLst = new List<FileList>();
string partialName = "webapi";
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"C:\MyFolder");
FileSystemInfo[] filesAndDirs = hdDirectoryInWhichToSearch.GetFileSystemInfos("*" + partialName + "*");
foreach (FileSystemInfo foundFile in filesAndDirs)
{
string fullName = foundFile.FullName;
Console.WriteLine(fullName);
if (foundFile.GetType() == typeof(FileInfo))
{
FileInfo fileInfo = (FileInfo)foundFile;
oLst.Add(new FileList
{
Name = fileInfo.Name,
Type = "File",
location = fileInfo.FullName,
Size = Format.ByteSize(fileInfo.Length)
});
}
if (foundFile.GetType() == typeof(DirectoryInfo))
{
Console.WriteLine("... is a directory");
DirectoryInfo directoryInfo = (DirectoryInfo)foundFile;
FileInfo[] subfileInfos = directoryInfo.GetFiles();
oLst.Add(new FileList
{
Name = directoryInfo.Name,
Type = "Folder",
location = directoryInfo.FullName,
Size = Format.ByteSize(GetDirectorySize(directoryInfo.FullName))
});
}
}
dataGridView1.DataSource = oLst;
}
}
public class FileList
{
public string Name { get; set; }
public string Type { get; set; }
public string location { get; set; }
public string Size { get; set; }
}
public static class Format
{
static string[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB" };
public static string ByteSize(long size)
{
string SizeText = string.Empty;
const string formatTemplate = "{0}{1:0.#} {2}";
if (size == 0)
{
return string.Format(formatTemplate, null, 0, "Bytes");
}
var absSize = Math.Abs((double)size);
var fpPower = Math.Log(absSize, 1000);
var intPower = (int)fpPower;
var iUnit = intPower >= sizeSuffixes.Length
? sizeSuffixes.Length - 1
: intPower;
var normSize = absSize / Math.Pow(1000, iUnit);
switch (sizeSuffixes[iUnit])
{
case "B":
SizeText= "Bytes";
break;
case "KB":
SizeText = "Kilo Bytes";
break;
case "MB":
SizeText = "Mega Bytes";
break;
case "GB":
SizeText = "Giga Bytes";
break;
case "TB":
SizeText = "Tera Bytes";
break;
default:
SizeText = "None";
break;
}
return string.Format(
formatTemplate,
size < 0 ? "-" : null, normSize, SizeText
);
}
}
}
名称空间模式搜索
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有长GetDirectorySize(字符串folderPath)
{
DirectoryInfo di=新的DirectoryInfo(folderPath);
返回di.EnumerateFiles(“**”,SearchOption.AllDirectory).Sum(fi=>fi.Length);
}
私有无效btnSearch_单击(对象发送者,事件参数e)
{
List oLst=新列表();
字符串partialName=“webapi”;
DirectoryInfo hdDirectoryInWhichToSearch=newdirectoryinfo(@“C:\MyFolder”);
FileSystemInfo[]filesAndDirs=hddirectorywhichtosearch.GetFileSystemInfos(“*”+partialName+“*”);
foreach(FileSystemInfo foundFile in filesAndDirs)
{
字符串fullName=foundFile.fullName;
Console.WriteLine(全名);
if(foundFile.GetType()==typeof(FileInfo))
{
FileInfo FileInfo=(FileInfo)foundFile;
添加(新文件列表)
{
Name=fileInfo.Name,
Type=“File”,
location=fileInfo.FullName,
Size=Format.ByteSize(fileInfo.Length)
});
}
if(foundFile.GetType()==typeof(DirectoryInfo))
{
WriteLine(“…是一个目录”);
DirectoryInfo DirectoryInfo=(DirectoryInfo)foundFile;
FileInfo[]subfileInfos=directoryInfo.GetFiles();
添加(新文件列表)
{
Name=directoryInfo.Name,
Type=“文件夹”,
位置=directoryInfo.FullName,
Size=Format.ByteSize(GetDirectorySize(directoryInfo.FullName))
});
}
}
dataGridView1.DataSource=oLst;
}
}
公共类文件列表
{
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共字符串位置{get;set;}
公共字符串大小{get;set;}
}
公共静态类格式
{
静态字符串[]SizeSuffix={“B”、“KB”、“MB”、“GB”、“TB”};
公共静态字符串字节大小(长)
{
string SizeText=string.Empty;
常量字符串formatTemplate=“{0}{1:0.#}{2}”;
如果(大小==0)
{
返回string.Format(formatTemplate,null,0,“字节”);
}
var absSize=数学绝对值((双)大小);
var fpPower=Math.Log(absSize,1000);
var intPower=(int)fpPower;
var iUnit=intPower>=sizesuffix.Length
?尺寸固定件。长度-1
:intPower;
var normSize=ABSIZE/数学功率(1000,单位);
交换机(SizeSuffix[iUnit])
{
案例“B”:
SizeText=“字节”;
打破
案例“KB”:
SizeText=“千字节”;
打破
案例“MB”:
SizeText=“兆字节”;
打破
案例“GB”:
SizeText=“千兆字节”;
打破
“结核病”病例:
SizeText=“万亿字节”;
打破
违约:
SizeText=“无”;
打破
}
返回字符串格式(
格式模板,
大小<0?“-”:null、normSize、SizeText
);
}
}
}
如果你搜索“webapi”,为什么列表中会出现mvc.iso
?我想说,当你自己还没有尝试过任何东西时,利用别人的时间问一个编码问题是不礼貌的(“我不在开发环境之前,所以无法测试下面的代码。”)。可能重复@Xaruth:错误的帖子url。请阅读我的问题并用c语言给出解决方案,而不是用其他语言。@Lasse V.Karlsen:是的,mvc.iso不应该合作
namespace PatternSearch
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private long GetDirectorySize(string folderPath)
{
DirectoryInfo di = new DirectoryInfo(folderPath);
return di.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}
private void btnSearch_Click(object sender, EventArgs e)
{
List<FileList> oLst = new List<FileList>();
string partialName = "webapi";
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"C:\MyFolder");
FileSystemInfo[] filesAndDirs = hdDirectoryInWhichToSearch.GetFileSystemInfos("*" + partialName + "*");
foreach (FileSystemInfo foundFile in filesAndDirs)
{
string fullName = foundFile.FullName;
Console.WriteLine(fullName);
if (foundFile.GetType() == typeof(FileInfo))
{
FileInfo fileInfo = (FileInfo)foundFile;
oLst.Add(new FileList
{
Name = fileInfo.Name,
Type = "File",
location = fileInfo.FullName,
Size = Format.ByteSize(fileInfo.Length)
});
}
if (foundFile.GetType() == typeof(DirectoryInfo))
{
Console.WriteLine("... is a directory");
DirectoryInfo directoryInfo = (DirectoryInfo)foundFile;
FileInfo[] subfileInfos = directoryInfo.GetFiles();
oLst.Add(new FileList
{
Name = directoryInfo.Name,
Type = "Folder",
location = directoryInfo.FullName,
Size = Format.ByteSize(GetDirectorySize(directoryInfo.FullName))
});
}
}
dataGridView1.DataSource = oLst;
}
}
public class FileList
{
public string Name { get; set; }
public string Type { get; set; }
public string location { get; set; }
public string Size { get; set; }
}
public static class Format
{
static string[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB" };
public static string ByteSize(long size)
{
string SizeText = string.Empty;
const string formatTemplate = "{0}{1:0.#} {2}";
if (size == 0)
{
return string.Format(formatTemplate, null, 0, "Bytes");
}
var absSize = Math.Abs((double)size);
var fpPower = Math.Log(absSize, 1000);
var intPower = (int)fpPower;
var iUnit = intPower >= sizeSuffixes.Length
? sizeSuffixes.Length - 1
: intPower;
var normSize = absSize / Math.Pow(1000, iUnit);
switch (sizeSuffixes[iUnit])
{
case "B":
SizeText= "Bytes";
break;
case "KB":
SizeText = "Kilo Bytes";
break;
case "MB":
SizeText = "Mega Bytes";
break;
case "GB":
SizeText = "Giga Bytes";
break;
case "TB":
SizeText = "Tera Bytes";
break;
default:
SizeText = "None";
break;
}
return string.Format(
formatTemplate,
size < 0 ? "-" : null, normSize, SizeText
);
}
}
}