Перебирайте каталоги и ищите файлы .JPG. - PullRequest
2 голосов
/ 15 октября 2010

У меня есть этот код, и я получаю 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);
                }

  }

Ответы [ 2 ]

4 голосов
/ 15 октября 2010

Извините за второй ответ, но я думаю, что вижу логическую ошибку ...

Я предполагаю, что на каждой итерации вы хотите искать файлы в текущей папке и получить подкаталоги, затем передать их обратно в функцию (кстати, неплохо использовать рекурсию) и повторять до тех пор, пока подкаталогов больше не будет. дочерние каталоги текущего каталога, а затем рекурсивно вызывает функцию для дочерних папок.Это будет означать, что на самом низком уровне не будет дочерних папок, и вы получите там ошибку.Это не объясняет, почему ошибка возникает в первой папке.

попробуйте изменить это

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); 
                } 

  } 
3 голосов
/ 15 октября 2010

Скорее всего, вам нужно исправить проблему с разрешениями.Это особенно сложно при работе под обычной учетной записью пользователя ASP.NET с доступом к общей папке UNC.

В этой статье Microsoft показано одно из возможных решений.

Лично я бы сопоставилвбить код.Я разместил код для этого здесь раньше.Если я смогу найти его, я дам вам ссылку.

Изменить

здесь: Доступ Asp.net к общему сетевому ресурсу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...