Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Как упорядочить файлы в System.IO.FileSystemInfo Добавлено: 09.05.06 16:40  

Автор вопроса:  dr.Faust
Вот такой код:

Dim di As System.IO.DirectoryInfo
Dim fsi() As System.IO.FileSystemInfo
di = New System.IO.DirectoryInfo(Dir)
fsi = di.GetFileSystemInfos(TextBox_Mask.Text)

Вопрос:
В каком, таком диком порядке fsi получает файлы?
Как упорядочить их по алфавиту?

fsi.Sort() не работает , требует аргумент. Что ей надо?
Array.Sort(fsi) так тоже не работает.
Помогите примером, плиз.

Ответить

  Ответы Всего ответов: 21  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 09.05.06 17:30
не ну сцуки вы нетчики :))) хоть что-то руками делать будите? массив уже упорядочить забыли как без дотнета :)))

Ответить

Номер ответа: 2
Автор ответа:
 dr.Faust



Вопросов: 6
Ответов: 26
 Профиль | | #2 Добавлено: 09.05.06 17:34
Если б мне надо было просто упорядочить массив...
И не была бы нужна кроссплатформенность PC/PDA...

И че ругаешься, то, не знаешь - не отвечай - не парься.

Ответить

Номер ответа: 3
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #3 Добавлено: 09.05.06 17:36
та ну я ж любя :) ты не обижайся...

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 09.05.06 23:26
 HACKER, руками.. это ты сам парься! :-)
А нам не пристало такой фигней заниматься!!!

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 10.05.06 01:50
dr.Faust
Фишка в том,что .NET не знает как тебе сортировать объекты типа FileSystemInfo по размеру файлов, аттрибутам, именам файлов и т.д. Он может сортировать только простые элементы... строка, число, дата т.д.. А вот чтобы сортировать обекты, ты должен создать класс реализующий интерфейс IComparer в котором надо переопределить функцию Compare чтобы .NET знал как сравнивнить 2 объекта заданного типа. Как это можно сделать я показал на примере:
Imports System.IO

Public Class Form1

    Private fileSysInfos() As FileSystemInfo

    Private Sub btnSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSort.Click
        If fileSysInfos Is Nothing OrElse fileSysInfos.Length = 0 Then Return
        Array.Sort(fileSysInfos, New FileSystemInfoComparer)
        ShowArrayItems()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim seachDirectory As String = "C:\WINDOWS"
        Dim dirInfo As New DirectoryInfo(seachDirectory)
        fileSysInfos = dirInfo.GetFileSystemInfos("*.exe";)
        ShowArrayItems()
    End Sub

    Private Sub ShowArrayItems()
        'Выводим элементы массива в ListBox1
        ListBox1.Items.Clear()
        For Each fileSysInfo As FileSystemInfo In fileSysInfos
            ListBox1.Items.Add(fileSysInfo.Name)
        Next
    End Sub

End Class

Public Class FileSystemInfoComparer
    Implements IComparer

    Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
       Implements IComparer.Compare
        'Для наглядности я реализовал сортировку ТОЛЬКО по именам
        'при желании можно организовать более сложный алгоритм
        'сортировки(по размерам файла,датам создания,аттрибутам  и т.д..)

        If x Is Nothing OrElse y Is Nothing Then Throw New ArgumentNullException

        Dim fullPath1 As String = String.Empty
        Dim fullPath2 As String = String.Empty

        Try
            fullPath1 = CType(x, FileSystemInfo).Name
            fullPath2 = CType(y, FileSystemInfo).Name
        Catch ex As Exception
            Throw New ArgumentException("Object of comparer is not FileSystemInfo";)
        End Try

        Return String.Compare(fullPath1, fullPath2)

    End Function

End Class

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 10.05.06 02:36
А вообще.. если делать по уму, то для твоей цели есть более подходящее решение, а именно System.Collections.SortedList.Твой случай сортировки-тривиален, поэтому все,что тебе надо сделать так это загнать твой массив в эту коллекцию и вытащить оттуда уже отсортированный по ключу массив. А IComparer целесообразней использовать в более сложных случаях, когда требуется сортировка по нескольким параметрам..
Вот второе решение твоей проблемы:

Imports System.IO

Public Class Form1

    Private fileSysInfos() As FileSystemInfo

    Private Sub btnSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSort.Click
        If fileSysInfos Is Nothing OrElse fileSysInfos.Length = 0 Then Return
        'Загоняем массив в коллекцию
        Dim SortedList As New System.Collections.SortedList
        For Each fileSysInfo As FileSystemInfo In fileSysInfos
            SortedList.Add(fileSysInfo.Name, fileSysInfo)
        Next
        'Возвращаем в исходный массив
        SortedList.Values.CopyTo(fileSysInfos, 0)
        'Отображаем результат
        ShowArrayItems()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim seachDirectory As String = "C:\WINDOWS"
        Dim dirInfo As New DirectoryInfo(seachDirectory)
        fileSysInfos = dirInfo.GetFileSystemInfos("*.exe";)
        ShowArrayItems()
    End Sub

    Private Sub ShowArrayItems()
        'Выводим элементы массива в ListBox1
        ListBox1.Items.Clear()
        For Each fileSysInfo As FileSystemInfo In fileSysInfos
            ListBox1.Items.Add(fileSysInfo.Name)
        Next
    End Sub

End Class

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 10.05.06 02:52
Только тут есть одни грабли, на которые можешь наступить.. Ключ-он должен быть уникален. Поскольку в 1 директории не может быть 2 файлов с одинаковыми именами то я использовал в качестве ключа имя файла, а следовательно не следует использовать этот способ для сортировки имен файлов из нескольких папок, так как есть риск того, что там окажуться 2 файла с одинаковыми именами. В этом случае ты получишь исключение..

Ответить

Номер ответа: 8
Автор ответа:
 я забыл падписацца, асёл



Вопросов: 0
Ответов: 8
 Профиль | | #8 Добавлено: 10.05.06 03:43
если сортировать системными средствами нах, то будет именно сортИровка, а если так, как делают нармальные рибята, такие как Хакер нах, то бодет хорошая сортирОвка нах. в жопу все системные средства хе хе

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 10.05.06 11:13
как делают нармальные рибята, такие как Хакер нах

Хакер нах... :-)
так то нАрмальные рИбята.. где уж нам до них..
в жопу все системные средства

круто.. солидно.. а самое главное-умно и достойно!

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 10.05.06 16:03
ну я ж гаварю :)

то блин в лист грузим потом там переславляем, то коллекцию создаём :)))) а в нете подобных полезностей то много :)) потом диск переворачиваешь... рульная игра... новые версии которой штампуются как новые формы унитазов... т.е. в день можно выпустить хоть 3 версии игры :))) а шо? :/ дотнет то быстра платформа доя разработки... :) вернёмся к обратной стороне диска
Системные требования:
P-3.0 Ram 1024, Rom 256... :/

так это я до рекомендуемых не дошёл... :)

я неговорю что если дотнет так куча ресурсов, с умом и на нём можно делать по нормальному... НО! Крутые то программисты которые научились запускать VS2005... :) теперь все хавайтесь... :)))

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 10.05.06 22:13
то блин в лист грузим потом там переславляем, то коллекцию создаём

хм.. а где ты видел,чтоб в лист грузили и там перставляли?? чего ты снова ахинею несешь?
И вообще,я не понимаю,чего ты добиваешься? Ведь ты сам в .NET полный ZERO! Как ты можешь судить о том, чего в принципе не понимаешь и никогда не работал!? Спрашивается, чего ради гадить на NET - форуме? Если б что по делу говорил-другой вопрос, а так ... -пустая трата времени.. и своего и чужого..((( Польза от подобных постов-нулевая..
И что такого в том, чтобы использовать специально предназначенную коллекцию? Если есть специализированные средства для сортировки, нафига мне надо руками это все делать? Всякими там "пузырьками" и подобными алгоритмами переставлять элементы массива :-)) Как вспомню это убожество из VB6 до сих пор смех разбирает!!

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 10.05.06 23:12
нет, VS .NET я уж запущу как-то, значит не зеро :)

про трату чужого времени - виноват. извиняюсь.

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 11.05.06 03:51
VS.NET я уж запущу как-то

А значит можешь уже отнести себя к числу крутых программеров, которые научились запускать VS2005 :-0)
про трату чужого времени - виноват. извиняюсь

А вот за это-респект! Всегда уважал людей,способных достойно признать ошибки.
А если серьезно.. Руслан, ты уж тоже извини что так на тебе отвязался, я не со зла.. просто знаешь,на самом деле порой обидно выслушивать необоснованные нападки. Да, признаю, в NET тоже есть недостатки.. ресурсы, скорость и т.д.. а какой язык или технология не имеет своих недостатков? Но все это ничтожно мало по сравнению с теми возможностями в разработке,что он предоставляет.. А за удобства всегда надо чем то платить. Да, согласен, ты добился определенного уровня знаний в VB6.. и чем больше ты знаешь, тем болезненнее будет для тебя проходить освоение .NET . Потому что 80% твоих знаний тут окажутся не востребованными. Скажу честно, мое первое впечатление от НЕТ..был шок. Шок от всего этого нового и не понятного.. и прошел далеко не один месяц и не одна бессонная ночь, прежде чем до меня начало доходить то, чего я был лишен в VB6. Я это все к тому, что я уже прошел через это, а тебе это только предстоит. А в том,что переход на НЕТ неизбежен я не сомневаюсь..это лишь вопрос времени(имхо).. Даже со всеми её минусами .NET - это,на мой взгляд, действительно толковая технология, способная решить 90% задач.. (10% оставляю на драйвера,трояны и прочие узкоспециализированные задачи) ))) Так что,впреть, давай не будем устраивать дебаты на тему: "А чо круче???".. время само все расставит на свои места..

Ответить

Номер ответа: 14
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #14
Добавлено: 11.05.06 04:27
HACKER он хоть и нАрмальный, но но один маленький недостаточеик есть: OCX не любит (вот какой нихарошый) хехе шутка

Ответить

Номер ответа: 15
Автор ответа:
 dr.Faust



Вопросов: 6
Ответов: 26
 Профиль | | #15 Добавлено: 11.05.06 08:29
2 EROS
Спасибо, счас буду разбираться. Вообще толково разъяснил.

Про .NET
Да, чего вы приципились, каждый пишет на чем хочет. Я кроме VB.NET вообще ни чего не знаю, может и изучил бы, но я не профи - пишу только если не могу найти какую либо прогу, те по необходимости и только для себя. Вообще это мое 3-е приложение на VB.NET и 4-е с '95-го(!) года. Представте какого оно, когда я только полгода назад узнал, что такое объектно орентированое програмирование.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам