你google上面搜索treeview看看,因为有用treeview做资源管理器的例子
你看看,要用到递归的,
你看看,要用到递归的,
解决方案 »
- 想在主窗体的关闭事件中停止其它线程?为什么会报无法访问对象的错误?Cannot access a disposed object
- 多态问题!
- c#,做电影网站地址加密
- 如何用代码杀进程,高手请进!。。。。。
- xml问题,高手请进来
- 请问,可以用C#控制word来写入到数据库吗?
- 新手请教!(在线等)
- Bin Packing优化算法
- 急!!!页面实现导出数据到excel遇到的问题!
- 求一个C#动态编译的代码
- 跪求(项目中):一个panel中加入10000个label时,出现System.ComponentModel.Win32Exception异常!定有高分相送!!
- 求助一个C#连接带密码得ACCESS数据库和连接带密码得MS SQL数据库得方法。
Set f2 = MyFolder.Files
For Each f22 In f2
If Abort Then
Exit Sub
Else
If TxtFile.Text = "*.*" Then
frmResult.ListResult.AddItem Space(10) & f22
ElseIf InStr(1, Fso.GetFileName(f22), TxtFile.Text, vbTextCompare) Then
frmResult.ListResult.AddItem Space(10) & f22
End If
End If
Next
End SubSub GetFolder(FolderStart As String, SubFolderStart As String) If Right(FolderStart, 1) <> "\" Then
FolderStart = FolderStart & "\"
End If
Set f = Fso.GetFolder(FolderStart & SubFolderStart)
Set fc = f.SubFolders For Each FolderItem In fc
If FolderIte = Folder Then
SearchFile FolderItem
GetFolder FolderStart & SubFolderStart & "\", FolderItem.Name
End If
Next
End Sub
这是VB的,可以改成C#的啊!
using System.Collections;
using System.IO;
namespace ConsoleApplication1
{
class FileSearcher
{
static void Main(string[] args)
{
FileSearcher s = new FileSearcher();
string basepath = @"C:\";
string filename = "*.txt";
foreach( string str in s.SearchFile(basepath, filename) )
{
Console.WriteLine( str );
}
} public ArrayList SearchFile( string path, string filename )
{
m_filename = filename;
m_resultFiles = new ArrayList(); ProcessDirectory( path ); return m_resultFiles;
} private string m_filename;
private ArrayList m_resultFiles; public void ProcessDirectory( string path )
{
foreach( string str in Directory.GetFiles( path, m_filename ) )
{
m_resultFiles.Add( path + str );
} foreach( string str in Directory.GetDirectories( path ) )
{
ProcessDirectory( str );
}
}
}
}
http://www.cnblogs.com/jjwwww/archive/2004/09/04/39559.html
/// 删除目录和其子目录
/// </summary>
/// <param name="dir"></param>
private void Deldir(string dir)
{
int i;
string[] subdirs = Directory.GetDirectories(dir);
for (i = 0 ; i < subdirs.GetUpperBound(0) + 1; ++i)
{
Deldir(subdirs[i]);
}
string[] files = Directory.GetFiles(dir);
FileAttributes fab;
for (i = 0 ; i < files.GetUpperBound(0) + 1; ++i)
{
fab = File.GetAttributes(files[i]);
File.SetAttributes(files[i],fab & ~FileAttributes.ReadOnly & ~FileAttributes.System);
File.Delete(files[i]);
}
DirectoryInfo di = new DirectoryInfo(dir);
di.Attributes &= ~FileAttributes.ReadOnly;
di.Attributes &= ~FileAttributes.System;
di.Delete(true);
}
/// <summary>
/// 递归调用删除目录操作
/// </summary>
private void DelDR(DirectoryInfo di,ArrayList aSel)
{
string str = di.Name.ToUpper();
bool bFind = false;
for (int i = 0 ; i < aSel.Count; ++i)
{
if (str.CompareTo(aSel[i].ToString()) == 0 )
{
try
{
// Delete the directory.
di.Attributes &= ~FileAttributes.ReadOnly;
di.Attributes &= ~FileAttributes.System;
di.Delete(true);
}
catch (Exception e)
{
string str2 = "无法删除!";
MessageBox.Show(str2 + e.ToString());
}
bFind = true;
break;
}
}
if (bFind == false)
{
foreach(DirectoryInfo folder in di.GetDirectories()) DelDR(folder,aSel);
}
}
private void DelExt(DirectoryInfo di,ArrayList aSel)
{
string str ;
int i,j;
FileInfo[] fi = di.GetFiles();
for (j = fi.GetUpperBound(0); j >= 0; --j)
{
str = fi[j].Extension.ToUpper();
for (i = 0 ; i < aSel.Count; ++i)
{
if (str.CompareTo(aSel[i].ToString()) == 0 )
{
try
{
// Delete the File.
File.Delete(fi[j].FullName);
}
catch (Exception e)
{
string str2 = "无法删除!";
MessageBox.Show(str2 + e.ToString());
}
break;
}
}
}
foreach(DirectoryInfo folder in di.GetDirectories()) DelExt(folder,aSel);
}
private void DelFile(DirectoryInfo di,ArrayList aSel)
{
string str ;
int i,j;
FileInfo[] fi = di.GetFiles();
for (j = fi.GetUpperBound(0); j >= 0; --j)
{
str = fi[j].Name.ToUpper();
for (i = 0 ; i < aSel.Count; ++i)
{
if (str.CompareTo(aSel[i].ToString()) == 0 )
{
try
{
// Delete the File.
File.Delete(fi[j].FullName);
}
catch (Exception e)
{
string str2 = "无法删除!";
MessageBox.Show(str2 + e.ToString());
}
break;
}
}
}
foreach(DirectoryInfo folder in di.GetDirectories()) DelExt(folder,aSel);
}
[email protected]
用到两个函数ParseDirectory 和CreatePathList
void ParseDirectory(string path, string filter)
{
string[] dirs = Directory.GetDirectories(path);//得到子目录
IEnumerator iter = dirs.GetEnumerator();
while(iter.MoveNext())
{
string str = (string)(iter.Current);
ParseDirectory(str, filter);
}
string[] files = Directory.GetFiles(path, filter);
if(files.Length > 0)
{
m_numFiles += files.Length;
m_pathList.Add(files);
}
}
string[] CreatePathList()
{
if(m_numFiles <= 0)
{
return null;
} string[] str = new string[m_numFiles];
int index = 0; try
{
IEnumerator pathIter = m_pathList.GetEnumerator();
while(pathIter.MoveNext())
{
string[] ar = (string[])(pathIter.Current);
IEnumerator fileIter = ar.GetEnumerator();
while(fileIter.MoveNext())
{
str[index] = (string)(fileIter.Current);
++index;
}
}
}
catch(Exception e)
{
return null;
} return str;
}使用范例:如果要查找的:d目录下所有mp3文件string path="d:\\"; //目录名 也可以用相当路径
string filter="*.mp3"; //文件类型
int m_numFiles=0; //文件总数
ArrayList m_pathList = new ArrayList();//包含所有文件路径的数组
string[] files; //所有文件名
ParseDirectory(path, "*.mp3");
files=CreatePathList(); //生成文件名数组
if(files == null)
{
throw new Exception(String.Concat("No file found in ", path));
}
/////////////////////////////////
这段代码有问题请高手帮忙修改
如果可以的话把修改好的程序发到
{
string str ;
int i,j;
FileInfo[] fi = di.GetFiles();
for (j = fi.GetUpperBound(0); j >= 0; --j)
{
str = fi[j].Extension.ToUpper();
for (i = 0 ; i < aSel.Count; ++i)
{
if (str.ToUpper().CompareTo(aSel[i].ToString().ToUpper()) == 0 )
{
try
{
// Delete the File.
//File.Delete(fi[j].FullName);
//将该文件加入到你的数组里即可。
aResult.Add(fi[j].FullName);
}
catch (Exception e)
{
string str2 = "无法删除!";MessageBox.Show(str2 + e.ToString());
}
break;
}
}
}
foreach(DirectoryInfo folder in di.GetDirectories()) DelExt(folder,aSel);
}
调用:
ArrayList al = new ArrayList();
ArrayList aSel = new ArrayList();
aSel.Add("MP3");
DirectoryInfo di = new DirectoryInfo("C:\",aSel,al);
al就返回所有C:\下的mp3文件。