Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   C# Access Directory (https://forum.antichat.xyz/showthread.php?t=188114)

Sharper 18.03.2010 20:40

C# Access Directory
 
Здравствуйте, стоит такая задача, которую надо реализовать на C#:
Нахождение файла в Директории «C:\Documents and Settings» .
Код:

DirectoryInfo dir = new DirectoryInfo(“C:\Documents and Settings”);
    foreach (FileInfo file in dir.GetFiles(n_file, SearchOption.AllDirectories))
    {
            Console.WriteLine(file.FullName);
    }

Но в папке C:\Documents and Settings есть папки которые закрыты для чтения когда цыкл доходит до этой папки он выкидывает в catch .
Как сделать чтоб пропустило папку для чтение и цыкл пошол дальше.

gold-goblin 18.03.2010 20:46

Обработать событие catch. Как сделать на шарпе хз..

noxjoker 18.03.2010 20:51

gold-goblin тут проблема в том, что catch выкинет с цикла ... Я сам не знаю... но есть такой вариант.

Код:

class Program
{

    static void Main(string[] args)
    {
        ViewDirectory("C:\\Documents and Settings\\");
        Console.Read();
    }
    static void ViewDirectory(string path)
    {
        try
        {
            DirectoryInfo dirs = new DirectoryInfo(path);
            foreach (DirectoryInfo dir in dirs.GetDirectories())
            {
                Console.WriteLine(dir.ToString());
                ViewDirectory(dir);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("\tWarn. Path: {0}", path);
        }
    }
}

Мне тоже интересно ищо варианты...

Sharper 18.03.2010 21:01

noxjoker мне этот код не очень подходит... Метод за пускает самого себя ...

Хорошо а может кто знает как получить список папок закрытых для чтения .... Зарание спасибо ....

nitr0 18.03.2010 21:28

А если так?
PHP код:

DirectoryInfo dir = new DirectoryInfo(“C:\Documents and Settings”);
foreach (
FileInfo file in dir.GetFiles(n_file,SearchOption.AllDirectories))
{
try
{
         
Console.WriteLine(file.FullName);
}
catch
{
continue;
}



W!z@rD 19.03.2010 06:45

>>gold-goblin тут проблема в том, что catch выкинет с цикла ...

ничего подобного.

и цикл через "и" пишется.

noxjoker 19.03.2010 11:40

>>gold-goblin тут проблема в том, что catch выкинет с цикла ...

ничего подобного.

Что нечего подобного ?

Код:


DirectoryInfo dir = new DirectoryInfo("C:\\Documents and Settings\\");
        foreach (FileInfo file in dir.GetFiles("wand.dat", SearchOption.AllDirectories))
        {
            try
            {
                Console.WriteLine(file.FullName);
            }
            catch
            {
                // Когда он дойдет до папки которая закрыта для чтения в этот catch оно не попадет!
            }
        }

http://gravityd.narod.ru/P1.JPG


Код:

DirectoryInfo dir = new DirectoryInfo("C:\\Documents and Settings\\");
        try
        {
            foreach (FileInfo file in dir.GetFiles("wand.dat", SearchOption.AllDirectories))
            {
                Console.WriteLine(file.FullName);
            }
        }
        catch
        {
            // Когда он доходит до папки которая закрыта для чтения он попадает в catch и цыкл не продолжается.
        }

http://gravityd.narod.ru/P2.JPG

Делаем вывод что catch не поможет.

W!z@rD 19.03.2010 12:44

здравствуйте дорогая редакция
 
Цитата:

Сообщение от noxjoker
>>gold-goblin тут проблема в том, что catch выкинет с цикла ...

ничего подобного.

Что нечего подобного ?

Код:


DirectoryInfo dir = new DirectoryInfo("C:\\Documents and Settings\\");
        foreach (FileInfo file in dir.GetFiles("wand.dat", SearchOption.AllDirectories))
        {
            try
            {
                Console.WriteLine(file.FullName);
            }
            catch
            {
                // Когда он дойдет до папки которая закрыта для чтения в этот catch оно не попадет!
            }
        }

<Удален недоскрин>


Код:

DirectoryInfo dir = new DirectoryInfo("C:\\Documents and Settings\\");
        try
        {
            foreach (FileInfo file in dir.GetFiles("wand.dat", SearchOption.AllDirectories))
            {
                Console.WriteLine(file.FullName);
            }
        }
        catch
        {
            // Когда он доходит до папки которая закрыта для чтения он попадает в catch и цыкл не продолжается.
        }

<Удален недоскрин>

Делаем вывод что catch не поможет.

PHP код:

private static List<stringGetDirs(DirectoryInfo dir)
        {
            List<
stringad = new List<string>();
            try
            {
                foreach (var 
directory in dir.GetDirectories())
                {
                    
ad.AddRange(GetDirs(directory));
                }
            }
            catch (
UnauthorizedAccessException)
            {
                
ad.Add(dir.FullName);
            }
            return 
ad;
        }

        static 
void Main(string[] args)
        {
            
DirectoryInfo dir = new DirectoryInfo("C:\\Documents and Settings\\");
            List<
stringresult GetDirs(dir);
            foreach (var 
s in result)
            {
                
Console.WriteLine(s);
            }
            
Console.ReadKey();
        } 

делаем соответствующие выводы.

учите русский, смешно смотреть на ваши безграмотные посты.

P.S. зачетно на скринах замазал инфу
http://img401.imageshack.us/img401/3766/20526018.png

0kt0ber 20.03.2010 05:31

Код:

using System;
using System.Collections.Generic;
using System.IO;

class Program
{
    static void Main()
    {
          // Get all files in Documents
            List<string> dirs = FileHelper.GetFilesRecursive(@"C:\Temp");
            foreach (string p in dirs)
            {
                Console.WriteLine(p);
            }
            // Write count
            Console.WriteLine("Count: {0}", dirs.Count);
            Console.Read();
        }
    }

    static class FileHelper
    {
        public static List<string> GetFilesRecursive(string b)
        {
            // 1.
            // Store results in the file results list.
            List<string> result = new List<string>();

            // 2.
            // Store a stack of our directories.
            Stack<string> stack = new Stack<string>();

            // 3.
            // Add initial directory.
            stack.Push(b);

            // 4.
            // Continue while there are directories to process
            while (stack.Count > 0)
            {
                // A.
                // Get top directory
                string dir = stack.Pop();

                try
                {
                    // B
                    // Add all files at this directory to the result List.
                    result.AddRange(Directory.GetFiles(dir, "*.*"));

                    // C
                    // Add all directories at this directory.
                    foreach (string dn in Directory.GetDirectories(dir))
                    {
                        stack.Push(dn);
                    }
                }
                catch
                {
                    // D
                    // Could not open the directory
                }
            }
            return result;
        }
    }

Тут


Время: 14:42