如何解决用c#搜索文件
我想在所选磁盘的所有文件夹中搜索用户输入的文件。如果文件直接在磁盘上,我会得到一个回报,但它不会检查子文件夹。
string arama = TextBox1.Text;
string yol = ListBox1.SelectedItem.Value;
if (File.Exists(yol + arama))
{
string[] files = Directory.GetFiles(yol,arama);
foreach (string file in files)
ClientScript.RegisterStartupScript(this.GetType(),"myalert","alert('" + "DOSYA VAR. DOSYA YOLU = " + file + "');",true);
}
else
{
try
{
string[] files2 = Directory.GetFiles(yol,arama,SearchOption.AllDirectories);
if (files2 == null)
ClientScript.RegisterStartupScript(this.GetType(),"alert('" + "DOSYA YOK" + "');",true);
else
foreach (string file in files2)
ClientScript.RegisterStartupScript(this.GetType(),"alert('" + "DOSYA VAR. YOLU:" + files2 + "');",true);
}
catch (Exception ex)
{
ClientScript.RegisterStartupScript(this.GetType(),"alert('" + "DOSYA VAR. YOLU:" + ex + "');",true);
}
}
解决方法
如果文件存在,您似乎需要添加 SearchOption.AllDirectories
。
在搜索中包括当前目录及其所有子目录 手术。此选项包括重新分析点,例如已安装的驱动器 和搜索中的符号链接。
所以,这个
if (File.Exists(yol + arama))
{
string[] files = Directory.GetFiles(yol,arama);
foreach (string file in files)
ClientScript.RegisterStartupScript(this.GetType(),"myalert","alert('" + "DOSYA VAR. DOSYA YOLU = " + file + "');",true);
}
应该是:
if (File.Exists(yol + arama))
{
string[] files = Directory.GetFiles(yol,arama,SearchOption.AllDirectories);
foreach (string file in files)
ClientScript.RegisterStartupScript(this.GetType(),true);
}
见:GetFiles(String,String,SearchOption)
,您可以使用此代码搜索所有子文件夹;
private void ListFiles(DirectoryInfo dr,string searchname)
{
System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo[] subDirs = null;
try
{
files = dr.GetFiles(searchname + ".*");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
if (files != null)
{
foreach (FileInfo fi in files)
{
allFiles.Add(fi);
}
subDirs = dr.GetDirectories();
foreach (DirectoryInfo di in subDirs)
{
ListFiles(di,searchname);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。