我有这个代码,我得到一个IOException,无法弄清问题是什么。 我正在尝试遍历目录中的子目录并列出所有.JPG文件。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["AllEmpsLoadPath"] = "\\\\intranet.org\\Photo Album\\Employees";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
DirSearch((string)Session["AllEmpsLoadPath"]);
}
void DirSearch(string sDir)
{
foreach (string d in Directory.GetDirectories(sDir))
{
//I get an IOException here on the first iteration
//saying "There are no more files" and f is null
//even though there are subdirectories
foreach (string f in Directory.GetFiles(d, "*.JPG"))
{
BulletedList1.Items.Add(f);
}
DirSearch(d);
}
}
答案 0 :(得分:4)
对于第二个答案感到抱歉,但我认为我发现了一个逻辑错误......
我假设你想在每次迭代中搜索当前文件夹中的文件,然后获取子目录,然后将它们传递回函数(顺便使用递归)并重复,直到没有更多的子目录。
您编码的方式,该函数在当前目录的子目录中查找文件,然后递归调用子文件夹的函数。这意味着在最低级别,没有子文件夹,你会在那里得到一个错误。但是,它没有解释为什么第一个文件夹上发生错误。
尝试更改此
void DirSearch(string sDir)
{
foreach (string d in Directory.GetDirectories(sDir))
{
//I get an IOException here on the first iteration
//saying "There are no more files" and f is null
//even though there are subdirectories
foreach (string f in Directory.GetFiles(d, "*.JPG"))
{
BulletedList1.Items.Add(f);
}
DirSearch(d);
}
}
到这个
void DirSearch(string sDir)
{
foreach (string f in Directory.GetFiles(sDir, "*.JPG"))
{
BulletedList1.Items.Add(f);
}
foreach (string d in Directory.GetDirectories(sDir))
{
//I get an IOException here on the first iteration
//saying "There are no more files" and f is null
//even though there are subdirectories
DirSearch(d);
}
}
答案 1 :(得分:3)
您很可能需要更正权限问题。在普通的ASP.NET用户帐户下运行,访问UNC共享时,这一点尤其困难。
This Microsoft article显示了一种可能的解决方案。
就个人而言,我会在代码中映射驱动器。我以前在这里发布了代码。如果我能找到它,我会给你一个链接。
修改强>