PDA

Просмотр полной версии : C# Access Directory


Sharper
18.03.2010, 20:40
Здравствуйте, стоит такая задача, которую надо реализовать на 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
А если так?

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
>>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 не поможет.


private static List<string> GetDirs(DirectoryInfo dir)
{
List<string> ad = 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<string> result = 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;
}
}
Тут (http://dotnetperls.com/recursively-find-files)