Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Поисковик


Автор: Neymexa 17.3.2009, 23:02
Есть у кого исходники поисковика файлов.

Пример указываем директорию и находим в ней файлы определенной директории ну например .xml

Автор: SKrivosein 18.3.2009, 01:21
Если тебя правильно понял то примитивно:
Код

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\Windows");  
            FileInfo[] fi_array = di.GetFiles(); 

            foreach (FileInfo fi in fi_array)
            {
                if (fi.Extension == ".dat") 
                {
                    Console.WriteLine("{0}", fi.FullName); 
                }
            }
            Console.ReadLine();
        }
    }
}

Чтобы идти глубже используй ещё GetDirectories() , вернёт все поддиректории.
Ну ещё покапайся System.IO. Надеюсь помог.

Автор: Rififi 18.3.2009, 10:24
Neymexa
Есть у кого исходники поисковика файлов.
у Microsoft.
Качаешь NetMassDownloader, качаешь исходники .Net Framework, ищешь реализацию функций DirectoryInfo.GetFiles(...)

Автор: -Mikle- 18.3.2009, 10:26
Цитата(SKrivosein @  18.3.2009,  04:21 Найти цитируемый пост)
        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\Windows");  
            FileInfo[] fi_array = di.GetFiles(); 


Цитата(SKrivosein @  18.3.2009,  04:21 Найти цитируемый пост)
Чтобы идти глубже используй ещё GetDirectories()

Лучше тогда так:
Код

        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\Windows");  
            FileInfo[] fi_array = di.GetFiles("*.xml", SearchOption.AllDirectories);

Автор: Neymexa 19.3.2009, 13:01
благодарю за код но вот на счет этого кода

static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\Windows");  
            FileInfo[] fi_array = di.GetFiles(); //вот эта строка-объект fi_array а вот FileInfo[] откуда взяли?

Автор: Partizan 19.3.2009, 13:03
Neymexa, FileInfo[] - это массив объектов типа FileInfo

Автор: Neymexa 19.3.2009, 13:26
Цитата(Partizan @ 19.3.2009,  13:03)
Neymexa, FileInfo[] - это массив объектов типа FileInfo

библиотеку 
using System.Collections.Generic;
из-за этого подключаем?
А на счет FileInfo[] спасибо

Автор: Partizan 19.3.2009, 14:24
Neymexa, да вроде бы как нет smile

Автор: Neymexa 19.3.2009, 17:47
Цитата(SKrivosein @ 18.3.2009,  01:21)
Если тебя правильно понял то примитивно:
Код

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\Windows");  
            FileInfo[] fi_array = di.GetFiles(); 

            foreach (FileInfo fi in fi_array)
            {
                if (fi.Extension == ".dat") 
                {
                    Console.WriteLine("{0}", fi.FullName); 
                }
            }
            Console.ReadLine();
        }
    }
}

Чтобы идти глубже используй ещё GetDirectories() , вернёт все поддиректории.
Ну ещё покапайся System.IO. Надеюсь помог.

парни я хочу сделать не консоль а через форму.
я попытаюсь - если что поможете?

думаю трудность будет в выводе файлов.
необходимо наверно делать вывод результатов через массив?

Добавлено через 3 минуты и 54 секунды
еще может кто знает хороший русскоязычный ресурс по C#-многие советуют msdn но я плохо понимаю английский а rsdn фигня - искал что нужно так и не нашел

Автор: Partizan 19.3.2009, 18:12
Neymexa, msdn переведён отчасти на русский язык, а rsdn - один из лучших русскоязычных ресурсов по программированию.

Автор: SKrivosein 19.3.2009, 18:55
Цитата

парни я хочу сделать не консоль а через форму.
я попытаюсь - если что поможете?

Neymexa  ты спросил, мы обьяснили как сделать такой моторчик, консоль - не консоль.
Цитата

думаю трудность будет в выводе файлов.

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

Автор: Neymexa 19.3.2009, 21:16
Цитата(SKrivosein @ 19.3.2009,  18:55)
Цитата

парни я хочу сделать не консоль а через форму.
я попытаюсь - если что поможете?

Neymexa  ты спросил, мы обьяснили как сделать такой моторчик, консоль - не консоль.
Цитата

думаю трудность будет в выводе файлов.

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

форма примерно такая поле ввода кнопка и  listbox там будет выводится список найденных файлов.ну вот пока все
можно докопаться и сделать маленькое меню.но это потом

Автор: SKrivosein 22.3.2009, 20:23
Копался в этом не много дольше и нашёл (методом тыка) что далеко не все файлы и директории можно так "иследовать".
Допустим при попытке стелать это
Код

           DirectoryInfo dirRoot = new DirectoryInfo("C:\\");
           DirectoryInfo[] dirInfo = dirRoot.GetDirectories();

            foreach (DirectoryInfo di in dirInfo)
            {
                    DirectoryInfo[] newGenDirInfo = di.GetDirectories(); //Exception !!!
            }

получим исключение: "В доступе на директории C:\ System Volume Information отказано."
Тоже самое делают некоторые файлы, антивираки и т.п.
Без блока try - catch можно поймать трудно уловимую ошибку, которую сам Windows почему то игнорирует.
По крайней мере мне не появлялась стандартная "unhandled exception".
----------------------------------------- 
А ещё смайлика нарисую ->  smile 


Автор: Neymexa 23.3.2009, 21:49
наверно эти файлы с необычным доступом - типо системный или скрытый .
благодарю езе раз  smile 

Код

 static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(@"C:\Windows");  
            FileInfo[] fi_array = di.GetFiles(); 
            foreach (FileInfo fi in fi_array)
            {
                if (fi.Extension == ".dat") 
                {
                    Console.WriteLine("{0}", fi.FullName); 
                }
            }
            Console.ReadLine();
        }

хочу переделать код из консоли в форму .
вопрос ?- при передаче данных в DirectoryInfo вместо @"C:\Windows" я буду вставлять из texbox1.text при инициализации переменной не будет ли ошибки 
string i;
i=textbox1.text;
DirectoryInfo di = new DirectoryInfo(i);  // ошибки не будет?

Автор: Partizan 23.3.2009, 23:53
Neymexa, ошибки времени компиляции точно не будет smile

Автор: Neymexa 25.3.2009, 11:20
Ну как я и говорил у меня ошибка - не знаю как ее обойти

string i;
i=textbox1.text;
DirectoryInfo di = new DirectoryInfo(i);  
пишет путь имеет недопустимую форму.

Автор: Rififi 25.3.2009, 13:22
Neymexa
путь имеет недопустимую форму
привести путь к допустимой форме
гооглить "win32 naming file path"

Автор: Neymexa 27.3.2009, 11:53
хм что то не получается

Автор: ZmeyNet 27.3.2009, 12:42
что то у меня закралось подозрение что автор изобретает OpenFileDialog

Автор: SKrivosein 27.3.2009, 20:19
Neymexa ты откуда путь директории брать собираешся?
Если у тебя человек руками вводит то помоему лучше в форму бросить с Toolbox диалог Folder Browser Dialog и выбирать с него.
Если хочеш всёж с техт-бокса то путь должен быть полный и сконтролируй его, чет типа
Код

 private void buttonSelectDirectory_Click(object sender, EventArgs e)
        {
            if (textBoxManualSelect.TextLength == 0)//с диалога
            {
                folderBrowserDialog.ShowDialog();
                directory = folderBrowserDialog.SelectedPath; //выбираем с диалога
            }
            else   //всёж руками
            {
                directory = textBoxManualSelect.Text;
                DirectoryInfo di = new DirectoryInfo(directory);
                if (di.Exists) //проверяем наличее директ.
                {
                    ....; //двигаемся дальше
                }
                else
               {
                     ...; //к сожалению не двигаемся
               }
            }
        }

и по идее не должно быть проблем. Если получаеш директорию программно, ну допустим с базы данных, тоже проверь если существует.
А вот если путь не полный то помоему никакого простого решения нет, или я его пока не знаю smile 

Автор: Neymexa 27.3.2009, 22:05
SKrivosein чтоб я без тебя делал бы? наверно вот что -  smile  smile  smile  smile спасибо!скинь асю свою мне в личку 
ой что то не получается вызвать buttonSelectDirectory_Click.как это сделать?
ну с простой кнопкой то просто на ней кликаешь и все.есть также у этого компонента свойство shownewfolderbutton у меня оно true
 что на счет поля ввода да я и хотел чтобы мне подсказали какой компонент использовать.я нашел directoryentry and directorysearcher думал подойдут но сейчас кажется нет

Автор: VirusUZ 30.6.2010, 07:50
/////////// in C#

//get directory
foreach (string d in Directory.GetDirectories("C:\\a", "*b*"))
            {
                MessageBox.Show(d);
            }
// get file
foreach (string d in Directory.GetFiles("C:\\a", "*.dat"))
            {
                MessageBox.Show(d);
            }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)