再用dir.getdirectory();然后用foreach遍历文件夹,但是每当取得的文件夹是拒绝放问的话,就会终止遍历,请问要怎么跳过或者遇到时怎么继续?
40 个解决方案
#1
catch 掉啊
#2
你肯定装了360SD
#3
在你的foreach中加try---catch(Exception ex) 就可以了。
#4
有用catch,但是catch 后,它不继续往下遍历了。
如果是出现其他的错误,会继续遍历,但是这个拒绝放问的错误,会立刻让遍历停止。
如果是出现其他的错误,会继续遍历,但是这个拒绝放问的错误,会立刻让遍历停止。
#5
我没装360杀毒。
#6
不会停止的
我刚才试了
我刚才试了
for (int i = 0; i < 1000; i++)
{
string sss = "sd" + i.ToString();
try
{
if (i == 5)
{
throw new Exception();
}
}
catch { }
}
#7
我猜他的try catch 放在for的外层了。
#8
没问题
ArrayList ssss = new ArrayList();
for (int i = 0; i < 1000; i++)
{
ssss.Add(i);
}
foreach (int s in ssss)
{
string sss = "sd" + s.ToString();
try
{
if (s == 5)
{
throw new Exception();
}
}
catch { }
}
#9
for(.........)
{
try
{
......
}
catch
{
continue;
}
}
{
try
{
......
}
catch
{
continue;
}
}
#10
不是阿,你们用这个当然没问题,你们如果是win7, 试试获取c盘根目录的文件夹,当我遍历到system volume …那个文件夹,然后再继续取得该文件夹下的子文件夹,就出现错误,遍历停止。
你们实验要用我这种方法才知道是否会停止遍历。
你们实验要用我这种方法才知道是否会停止遍历。
#11
我试试 我是Win 7我现在遍历C文件夹
#12
把所有文件都显示,然后会看到某些文件夹有一个锁的图标,其中有某些是拒绝访问的,当取得那文件夹后,想要取得该文件夹下的子文件夹,就出错停止遍历。你们可以试试。
#13
我遍历
C:\\System Volume Information
没错
。。。都可以访问
C:\\System Volume Information
没错
。。。都可以访问
#14
应该可以获取文件夹的属性的吧?!
判断一下是否是拒绝访问的,是就continue,不是就进入 。
我只是提供个思路,没怎么用过这个,⊙﹏⊙‖∣
判断一下是否是拒绝访问的,是就continue,不是就进入 。
我只是提供个思路,没怎么用过这个,⊙﹏⊙‖∣
#15
试试用getaccesscontrol先判断一下能不能访问
#16
访问没出错,你试试用dir.getdirectory()试试。
#17
GetDirectory()?
你把代码贴出来算了
你把代码贴出来算了
#18
DirectoryInfo Di = new DirectoryInfo("c:\\");
try
{
foreach (FileInfo item in Di.GetFiles("*.*", SearchOption.AllDirectories))
{
Console.WriteLine(item.FullName);
}
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
我也想得到答案,关注!
15楼的使用 getaccesscontrol 也许能解决问题,但不会编码。
#19
你那里写错了,应该。
#20
foreach (string d in GetAuthorizedDirectories("C:\\"))
{
foreach (string d2 in GetAuthorizedDirectories(d))
{
Response.Write(d2);
}
}
public static string[] GetChildrenFiles(string path)
{
try
{
return Directory.GetDirectories(path);
}
catch
{
return new string[0];
}
}
#21
这个貌似对的
#22
应该谢谢 Ray_Yang ,不过他写错了一个单词。
http://social.msdn.microsoft.com/Forums/de-DE/2212/thread/478d6fd5-8898-4c46-8c92-8ee0253c596c
#23
是啊写错了 那不是楼主发的帖子吗,
#24
我不是楼主,我帮楼主顶,我也想知道答案:
http://topic.csdn.net/u/20091001/18/df483f2e-2018-4376-ad9c-581a6d136750.html?89346
http://topic.csdn.net/u/20091001/18/df483f2e-2018-4376-ad9c-581a6d136750.html?89346
#25
catch 掉
哇 楼已经很高了
哇 楼已经很高了
#26
我只路过~!
#27
1.用catch确实不行。
2.22楼帖的那个就是我在msdn社区里问的帖子,但是我按照他的写法来写,还是不行。
3.因为我的代码和9楼的模式不一样,所以并不能用continue
我贴上我的代码:
大家可以看下,这是我的截图:
这是当访问到该文件夹时的提示:
[img=http://b36.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaaa337ad046521984a6b87f1233a00a6cc89a401e74d8e2e0df3806715f269eda067478f504a7a7923391e89f4e06336e522f3427ef2d9e7ef10bb06aeeba0380ba90e659b&a=42&b=36][/img]
我是用listbox查看已经扫描到的文件夹,然后作为item添加到listbox。
可以看到,捕捉到catch语句后,没有继续执行了。
这个最下面那行是catch代码里面加的。说明后边没有再执行了。
[img=http://b42.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaa44764fa419d9901f42cee7d2bc083451dc0486969bf1dc6fd47e92f94e3baae6198a90bd8c9b20dd4aa587420fb494c18ce9109985f883cdadb3cfb2fb2033f06d2472c2&a=41&b=42][/img]
2.22楼帖的那个就是我在msdn社区里问的帖子,但是我按照他的写法来写,还是不行。
3.因为我的代码和9楼的模式不一样,所以并不能用continue
我贴上我的代码:
private void getdirs(string initialCatalog)
{
//当前路径
DirectoryInfo root = new DirectoryInfo(initialCatalog);
//取得当前文件夹名字,和关键字作对比。
string dirName = root.Name;
if (searchTag(dirName, textBoxTag.Text))
listBoxResult.Items.Add(root.FullName);
//取得当前文件夹下所有文件,和关键字作对比。
FileInfo[] files = root.GetFiles();
foreach (FileInfo file in files)
{
string fileName = "";
if (file.Name.IndexOf('.') != -1)
{
fileName = file.Name.Substring(0, file.Name.LastIndexOf('.'));
}
else fileName = file.Name;
if (searchTag(fileName, textBoxTag.Text)) listBoxResult.Items.Add(file.FullName);
}
//取得当前文件夹下所有文件夹,并用递归继续遍历所有子文件夹。
DirectoryInfo[] dirs = null;
try
{
dirs = root.GetDirectories();
}
catch (UnauthorizedAccessException x) { MessageBox.Show(x.Message); }
try
{
if (dirs != null)
{
foreach (DirectoryInfo d in dirs)
{
getdirs(d.FullName);
}
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); listBoxResult.Items.Add("-----------------------错误----------------------------"); }
}
大家可以看下,这是我的截图:
这是当访问到该文件夹时的提示:
[img=http://b36.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaaa337ad046521984a6b87f1233a00a6cc89a401e74d8e2e0df3806715f269eda067478f504a7a7923391e89f4e06336e522f3427ef2d9e7ef10bb06aeeba0380ba90e659b&a=42&b=36][/img]
我是用listbox查看已经扫描到的文件夹,然后作为item添加到listbox。
可以看到,捕捉到catch语句后,没有继续执行了。
这个最下面那行是catch代码里面加的。说明后边没有再执行了。
[img=http://b42.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaa44764fa419d9901f42cee7d2bc083451dc0486969bf1dc6fd47e92f94e3baae6198a90bd8c9b20dd4aa587420fb494c18ce9109985f883cdadb3cfb2fb2033f06d2472c2&a=41&b=42][/img]
#28
重新贴上图片:
#29
你到24楼里的进去看看,使用的是递归,好像能跳过错误 。。。
#30
24楼的都看过了。我也是用递归,不能跳过错误。很奇怪,扫描到拒绝访问的文件夹就会自动停止执行下边的代码,就算用try...catch...也一样。
我参考了msdn的MVP专家,用了另外一种比较不成方法的方法,问题可以解决,但是期待更好的方法出现:
我参考了msdn的MVP专家,用了另外一种比较不成方法的方法,问题可以解决,但是期待更好的方法出现:
private void getdirs(string initialCatalog)
{
//当前路径
DirectoryInfo root = new DirectoryInfo(initialCatalog);
//取得当前文件夹名字,和关键字作对比。
string dirName = root.Name;
if (searchTag(dirName, textBoxTag.Text))
listBoxResult.Items.Add(root.FullName);
//取得当前文件夹下所有文件,和关键字作对比。
/*主要就是改了这里,当不能获取下一级的文件时,置files为Null,使他不继续向下遍历*/
FileInfo[] files;
try
{
files= root.GetFiles();
}
catch { files = null; }
if (files != null)
{
foreach (FileInfo file in files)
{
string fileName = "";
if (file.Name.IndexOf('.') != -1)
{
fileName = file.Name.Substring(0, file.Name.LastIndexOf('.'));
}
else fileName = file.Name;
if (searchTag(fileName, textBoxTag.Text)) listBoxResult.Items.Add(file.FullName);
}
}
//取得当前文件夹下所有文件夹,并用递归继续遍历所有子文件夹。
/*主要就是改了这里,当不能获取下一级的文件夹时,置dirs为Null,使他不继续向下遍历*/
DirectoryInfo[] dirs = null;
try
{
dirs = root.GetDirectories();
}
catch { dirs = null; }
try
{
if (dirs != null)
{
foreach (DirectoryInfo d in dirs)
{
getdirs(d.FullName);
}
}
}
catch { listBoxResult.Items.Add("-----------------------错误----------------------------"); }
}
#31
用for不要用foreach就可以了。
for可以解决问题。很久之前也出现过这样的问题。
for可以解决问题。很久之前也出现过这样的问题。
#32
是在catch里面用continue解决的吗?
#33
有项目管理经验的.NET开发的朋友,加上限500人的QQ群28720769,一起交流。
#34
我总感觉有点“当不能获取下一级的文件夹时,置dirs为Null,使他不继续向下遍历”时,你把问题复杂化了。
private void GetDir(string TempDirStr)
{
DirectoryInfo Di = new DirectoryInfo(TempDirStr );
DirectoryInfo[] DIS = Di.GetDirectories();
for (int i = 0; i < DIS.Length ; i++)
{
try
{
Console.WriteLine(DIS[i].FullName);
GetDir(DIS[i].FullName);
}
catch (Exception Ex)
{
Console.WriteLine("WrongMsg: {0}", Ex.Message);
//continue; //continue语句在这里好像不起作用。
}
}
}
private void button8_Click(object sender, EventArgs e)
{
GetDir(@"C:\Documents and Settings\All Users");
}
#35
dir = dirs.Dequeue(); // 取一目录名
try
{
string[] fs = Directory.GetFiles(dir); // 获取该目录下的所有文件
foreach (string f in fs)
{
while (pause || bw.CancellationPending) // 处理暂停及取消操作
{
if (bw.CancellationPending) return; // 用户取消
Thread.Sleep(20);
}
bw.ReportProgress(1, f); // 报告当前进度
Thread.Sleep(interval); // 避免快速连续引发事件
}
fs = Directory.GetDirectories(dir); // 获取目录下的所有子目录
foreach (string d in fs)
{
dirs.Enqueue(d); // 各子目录入队
}
}
catch // 目录或文件无操作权限等
{
continue;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sxldfang/archive/2010/04/25/5527456.aspx
#36
这样只会抛异常啊!
#37
好像使用for foreach 都一样,不需用 continue.
private void GetDir(string TempDirStr)
{
DirectoryInfo Di = new DirectoryInfo(TempDirStr );
DirectoryInfo[] DIS = Di.GetDirectories();
foreach (DirectoryInfo item in DIS )
{
try
{
Console.WriteLine(item.FullName);
GetDir(item.FullName);
}
catch (Exception Ex)
{
Console.WriteLine("WrongMsg: {0}", Ex.Message);
}
}
}
我头有点晕了,有时间再来研究。
#38
如果不设置不能访问的为null,便不能跳过那些拒绝访问的文件夹,纯粹是遍历了。
#39
之前也碰到过这样的问题,帮顶。。。
#40
虽然是老贴了,但是碰到了就说一下.
本来我也很纠结这个弹错的.
但是貌似经过实验对比,并没有中断,完好的遍历了所需所有文件.
try了这里
本来我也很纠结这个弹错的.
但是貌似经过实验对比,并没有中断,完好的遍历了所需所有文件.
try了这里
private void ProcessDirectory(string targetDirectory)
{
//检测3种文件
try
{
string[] fileEntries1 = System.IO.Directory.GetFiles(@targetDirectory, "*.txt");
string[] fileEntries2 = System.IO.Directory.GetFiles(@targetDirectory, "*.lrc");
string[] fileEntries3 = System.IO.Directory.GetFiles(@targetDirectory, "*.krc");
foreach (string fileName in fileEntries1)
ProcessFile(fileName);
foreach (string fileName in fileEntries2)
ProcessFile(fileName);
foreach (string fileName in fileEntries3)
ProcessFile(fileName);
//检测子文件夹
string[] subdirectoryEntries = System.IO.Directory.GetDirectories(@targetDirectory);
foreach (string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory); //递归调用
}
catch { }
}
#1
catch 掉啊
#2
你肯定装了360SD
#3
在你的foreach中加try---catch(Exception ex) 就可以了。
#4
有用catch,但是catch 后,它不继续往下遍历了。
如果是出现其他的错误,会继续遍历,但是这个拒绝放问的错误,会立刻让遍历停止。
如果是出现其他的错误,会继续遍历,但是这个拒绝放问的错误,会立刻让遍历停止。
#5
我没装360杀毒。
#6
不会停止的
我刚才试了
我刚才试了
for (int i = 0; i < 1000; i++)
{
string sss = "sd" + i.ToString();
try
{
if (i == 5)
{
throw new Exception();
}
}
catch { }
}
#7
我猜他的try catch 放在for的外层了。
#8
没问题
ArrayList ssss = new ArrayList();
for (int i = 0; i < 1000; i++)
{
ssss.Add(i);
}
foreach (int s in ssss)
{
string sss = "sd" + s.ToString();
try
{
if (s == 5)
{
throw new Exception();
}
}
catch { }
}
#9
for(.........)
{
try
{
......
}
catch
{
continue;
}
}
{
try
{
......
}
catch
{
continue;
}
}
#10
不是阿,你们用这个当然没问题,你们如果是win7, 试试获取c盘根目录的文件夹,当我遍历到system volume …那个文件夹,然后再继续取得该文件夹下的子文件夹,就出现错误,遍历停止。
你们实验要用我这种方法才知道是否会停止遍历。
你们实验要用我这种方法才知道是否会停止遍历。
#11
我试试 我是Win 7我现在遍历C文件夹
#12
把所有文件都显示,然后会看到某些文件夹有一个锁的图标,其中有某些是拒绝访问的,当取得那文件夹后,想要取得该文件夹下的子文件夹,就出错停止遍历。你们可以试试。
#13
我遍历
C:\\System Volume Information
没错
。。。都可以访问
C:\\System Volume Information
没错
。。。都可以访问
#14
应该可以获取文件夹的属性的吧?!
判断一下是否是拒绝访问的,是就continue,不是就进入 。
我只是提供个思路,没怎么用过这个,⊙﹏⊙‖∣
判断一下是否是拒绝访问的,是就continue,不是就进入 。
我只是提供个思路,没怎么用过这个,⊙﹏⊙‖∣
#15
试试用getaccesscontrol先判断一下能不能访问
#16
访问没出错,你试试用dir.getdirectory()试试。
#17
GetDirectory()?
你把代码贴出来算了
你把代码贴出来算了
#18
DirectoryInfo Di = new DirectoryInfo("c:\\");
try
{
foreach (FileInfo item in Di.GetFiles("*.*", SearchOption.AllDirectories))
{
Console.WriteLine(item.FullName);
}
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
我也想得到答案,关注!
15楼的使用 getaccesscontrol 也许能解决问题,但不会编码。
#19
你那里写错了,应该。
#20
foreach (string d in GetAuthorizedDirectories("C:\\"))
{
foreach (string d2 in GetAuthorizedDirectories(d))
{
Response.Write(d2);
}
}
public static string[] GetChildrenFiles(string path)
{
try
{
return Directory.GetDirectories(path);
}
catch
{
return new string[0];
}
}
#21
这个貌似对的
#22
应该谢谢 Ray_Yang ,不过他写错了一个单词。
http://social.msdn.microsoft.com/Forums/de-DE/2212/thread/478d6fd5-8898-4c46-8c92-8ee0253c596c
#23
是啊写错了 那不是楼主发的帖子吗,
#24
我不是楼主,我帮楼主顶,我也想知道答案:
http://topic.csdn.net/u/20091001/18/df483f2e-2018-4376-ad9c-581a6d136750.html?89346
http://topic.csdn.net/u/20091001/18/df483f2e-2018-4376-ad9c-581a6d136750.html?89346
#25
catch 掉
哇 楼已经很高了
哇 楼已经很高了
#26
我只路过~!
#27
1.用catch确实不行。
2.22楼帖的那个就是我在msdn社区里问的帖子,但是我按照他的写法来写,还是不行。
3.因为我的代码和9楼的模式不一样,所以并不能用continue
我贴上我的代码:
大家可以看下,这是我的截图:
这是当访问到该文件夹时的提示:
[img=http://b36.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaaa337ad046521984a6b87f1233a00a6cc89a401e74d8e2e0df3806715f269eda067478f504a7a7923391e89f4e06336e522f3427ef2d9e7ef10bb06aeeba0380ba90e659b&a=42&b=36][/img]
我是用listbox查看已经扫描到的文件夹,然后作为item添加到listbox。
可以看到,捕捉到catch语句后,没有继续执行了。
这个最下面那行是catch代码里面加的。说明后边没有再执行了。
[img=http://b42.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaa44764fa419d9901f42cee7d2bc083451dc0486969bf1dc6fd47e92f94e3baae6198a90bd8c9b20dd4aa587420fb494c18ce9109985f883cdadb3cfb2fb2033f06d2472c2&a=41&b=42][/img]
2.22楼帖的那个就是我在msdn社区里问的帖子,但是我按照他的写法来写,还是不行。
3.因为我的代码和9楼的模式不一样,所以并不能用continue
我贴上我的代码:
private void getdirs(string initialCatalog)
{
//当前路径
DirectoryInfo root = new DirectoryInfo(initialCatalog);
//取得当前文件夹名字,和关键字作对比。
string dirName = root.Name;
if (searchTag(dirName, textBoxTag.Text))
listBoxResult.Items.Add(root.FullName);
//取得当前文件夹下所有文件,和关键字作对比。
FileInfo[] files = root.GetFiles();
foreach (FileInfo file in files)
{
string fileName = "";
if (file.Name.IndexOf('.') != -1)
{
fileName = file.Name.Substring(0, file.Name.LastIndexOf('.'));
}
else fileName = file.Name;
if (searchTag(fileName, textBoxTag.Text)) listBoxResult.Items.Add(file.FullName);
}
//取得当前文件夹下所有文件夹,并用递归继续遍历所有子文件夹。
DirectoryInfo[] dirs = null;
try
{
dirs = root.GetDirectories();
}
catch (UnauthorizedAccessException x) { MessageBox.Show(x.Message); }
try
{
if (dirs != null)
{
foreach (DirectoryInfo d in dirs)
{
getdirs(d.FullName);
}
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); listBoxResult.Items.Add("-----------------------错误----------------------------"); }
}
大家可以看下,这是我的截图:
这是当访问到该文件夹时的提示:
[img=http://b36.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaaa337ad046521984a6b87f1233a00a6cc89a401e74d8e2e0df3806715f269eda067478f504a7a7923391e89f4e06336e522f3427ef2d9e7ef10bb06aeeba0380ba90e659b&a=42&b=36][/img]
我是用listbox查看已经扫描到的文件夹,然后作为item添加到listbox。
可以看到,捕捉到catch语句后,没有继续执行了。
这个最下面那行是catch代码里面加的。说明后边没有再执行了。
[img=http://b42.photo.store.qq.com/http_imgload.cgi?/rurl4_b=f03f05a824bf754f05aee22b90c6faaa44764fa419d9901f42cee7d2bc083451dc0486969bf1dc6fd47e92f94e3baae6198a90bd8c9b20dd4aa587420fb494c18ce9109985f883cdadb3cfb2fb2033f06d2472c2&a=41&b=42][/img]
#28
重新贴上图片:
#29
你到24楼里的进去看看,使用的是递归,好像能跳过错误 。。。
#30
24楼的都看过了。我也是用递归,不能跳过错误。很奇怪,扫描到拒绝访问的文件夹就会自动停止执行下边的代码,就算用try...catch...也一样。
我参考了msdn的MVP专家,用了另外一种比较不成方法的方法,问题可以解决,但是期待更好的方法出现:
我参考了msdn的MVP专家,用了另外一种比较不成方法的方法,问题可以解决,但是期待更好的方法出现:
private void getdirs(string initialCatalog)
{
//当前路径
DirectoryInfo root = new DirectoryInfo(initialCatalog);
//取得当前文件夹名字,和关键字作对比。
string dirName = root.Name;
if (searchTag(dirName, textBoxTag.Text))
listBoxResult.Items.Add(root.FullName);
//取得当前文件夹下所有文件,和关键字作对比。
/*主要就是改了这里,当不能获取下一级的文件时,置files为Null,使他不继续向下遍历*/
FileInfo[] files;
try
{
files= root.GetFiles();
}
catch { files = null; }
if (files != null)
{
foreach (FileInfo file in files)
{
string fileName = "";
if (file.Name.IndexOf('.') != -1)
{
fileName = file.Name.Substring(0, file.Name.LastIndexOf('.'));
}
else fileName = file.Name;
if (searchTag(fileName, textBoxTag.Text)) listBoxResult.Items.Add(file.FullName);
}
}
//取得当前文件夹下所有文件夹,并用递归继续遍历所有子文件夹。
/*主要就是改了这里,当不能获取下一级的文件夹时,置dirs为Null,使他不继续向下遍历*/
DirectoryInfo[] dirs = null;
try
{
dirs = root.GetDirectories();
}
catch { dirs = null; }
try
{
if (dirs != null)
{
foreach (DirectoryInfo d in dirs)
{
getdirs(d.FullName);
}
}
}
catch { listBoxResult.Items.Add("-----------------------错误----------------------------"); }
}
#31
用for不要用foreach就可以了。
for可以解决问题。很久之前也出现过这样的问题。
for可以解决问题。很久之前也出现过这样的问题。
#32
是在catch里面用continue解决的吗?
#33
有项目管理经验的.NET开发的朋友,加上限500人的QQ群28720769,一起交流。
#34
我总感觉有点“当不能获取下一级的文件夹时,置dirs为Null,使他不继续向下遍历”时,你把问题复杂化了。
private void GetDir(string TempDirStr)
{
DirectoryInfo Di = new DirectoryInfo(TempDirStr );
DirectoryInfo[] DIS = Di.GetDirectories();
for (int i = 0; i < DIS.Length ; i++)
{
try
{
Console.WriteLine(DIS[i].FullName);
GetDir(DIS[i].FullName);
}
catch (Exception Ex)
{
Console.WriteLine("WrongMsg: {0}", Ex.Message);
//continue; //continue语句在这里好像不起作用。
}
}
}
private void button8_Click(object sender, EventArgs e)
{
GetDir(@"C:\Documents and Settings\All Users");
}
#35
dir = dirs.Dequeue(); // 取一目录名
try
{
string[] fs = Directory.GetFiles(dir); // 获取该目录下的所有文件
foreach (string f in fs)
{
while (pause || bw.CancellationPending) // 处理暂停及取消操作
{
if (bw.CancellationPending) return; // 用户取消
Thread.Sleep(20);
}
bw.ReportProgress(1, f); // 报告当前进度
Thread.Sleep(interval); // 避免快速连续引发事件
}
fs = Directory.GetDirectories(dir); // 获取目录下的所有子目录
foreach (string d in fs)
{
dirs.Enqueue(d); // 各子目录入队
}
}
catch // 目录或文件无操作权限等
{
continue;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sxldfang/archive/2010/04/25/5527456.aspx
#36
这样只会抛异常啊!
#37
好像使用for foreach 都一样,不需用 continue.
private void GetDir(string TempDirStr)
{
DirectoryInfo Di = new DirectoryInfo(TempDirStr );
DirectoryInfo[] DIS = Di.GetDirectories();
foreach (DirectoryInfo item in DIS )
{
try
{
Console.WriteLine(item.FullName);
GetDir(item.FullName);
}
catch (Exception Ex)
{
Console.WriteLine("WrongMsg: {0}", Ex.Message);
}
}
}
我头有点晕了,有时间再来研究。
#38
如果不设置不能访问的为null,便不能跳过那些拒绝访问的文件夹,纯粹是遍历了。
#39
之前也碰到过这样的问题,帮顶。。。
#40
虽然是老贴了,但是碰到了就说一下.
本来我也很纠结这个弹错的.
但是貌似经过实验对比,并没有中断,完好的遍历了所需所有文件.
try了这里
本来我也很纠结这个弹错的.
但是貌似经过实验对比,并没有中断,完好的遍历了所需所有文件.
try了这里
private void ProcessDirectory(string targetDirectory)
{
//检测3种文件
try
{
string[] fileEntries1 = System.IO.Directory.GetFiles(@targetDirectory, "*.txt");
string[] fileEntries2 = System.IO.Directory.GetFiles(@targetDirectory, "*.lrc");
string[] fileEntries3 = System.IO.Directory.GetFiles(@targetDirectory, "*.krc");
foreach (string fileName in fileEntries1)
ProcessFile(fileName);
foreach (string fileName in fileEntries2)
ProcessFile(fileName);
foreach (string fileName in fileEntries3)
ProcessFile(fileName);
//检测子文件夹
string[] subdirectoryEntries = System.IO.Directory.GetDirectories(@targetDirectory);
foreach (string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory); //递归调用
}
catch { }
}