Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Suppir
24 / 24 / 10
Регистрация: 08.08.2011
Сообщений: 1,155
#1

Получить массив файлов с сортировкой по размеру без LINQ - C#

24.09.2014, 16:12. Просмотров 627. Ответов 5
Метки нет (Все метки)

Нужно получить список файлов в директории. Файлы отсортированы по убыванию размера. LINQ пользоваться нельзя.

Пишу:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string[] Files = new string[] { };
 
Files = Directory.GetFiles(Path, FileMask, SearchOption.AllDirectories);
 
Dictionary<string, long> dicFiles = new Dictionary<string, long>();
 
foreach (string file in Files)
            {
                FileInfo fi = new FileInfo(file);
                var size = fi.Length;
                try
                {
                    dicFiles.Add(file, size);
                }
                catch { }
            }
Как теперь отсортировать dicFiles по значению (value = размер файла), а потом преобразовать ключи dicFiles в изначальный массив Files?

Добавлено через 2 минуты
Я, конечно, понимаю, что с LINQ проще:
C#
1
Directory.GetFiles(Path, FileMask, SearchOption.AllDirectories).Select(fn => new FileInfo(fn)).OrderBy(f => f.Length);
Но мне нужно без LINQ.

Добавлено через 9 минут
Задача: получить массив файлов, отсортированный по убыванию размера файлов.
http://www.cyberforum.ru/csharp-beginners/thread2232598.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2014, 16:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получить массив файлов с сортировкой по размеру без LINQ (C#):

Вывести построчно на экран исходный массив и массив, полученный сортировкой по убыванию столбца
Вот такая задача... Не представляю как делать.. Из элементов, хранящихся ...

Получить массив файлов папки и работать с ним
Подскажите, что я неправильно делаю! Мне необходимо выбрать папку с image,...

Получить массив с путями всех jpg файлов
Требуется записать в массив пути всех jpg файлов имеющихся на компьютере ...

Получить новый массив из данного без нулевых элементов
Прошу помощи. Дан массив целых чисел. Получить новый массив из данного без...

Linq или не Linq. Linq медленней стандартных методов?
Есть у нас два массива, нужно найти совпадения в первом из второго. Два...

5
nedel
588 / 588 / 345
Регистрация: 09.04.2014
Сообщений: 1,397
Завершенные тесты: 1
24.09.2014, 16:18 #2
C#
1
2
3
4
5
6
7
8
9
10
11
12
List<KeyValuePair<string, long>> myList = new List<KeyValuePair<string, long>>(dicFiles);
 
            myList.Sort((firstPair, nextPair) =>
            {
                return -firstPair.Value.CompareTo(nextPair.Value);
            }
            );
            Files = new string[myList.Count];
            for (int i = 0; i < Files.Length; i++)
            {
                Files[i] = myList[i].Key;
            }
0
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,486
24.09.2014, 16:24 #3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public class FileLengthReverseComparer: IComparer<FileInfo>
{
    public int Compare(FileInfo x, FileInfo y)
    {
        return y.Length.CompareTo(x.Length);
    }
}
//......
var files = Directory.GetFiles(Path, FileMask, SearchOption.AllDirectories);
FileInfo[] fi= new FileInfo[files.Length]; 
foreach (int i=0; i<files.Length; i++)
{
     fi[i] = new FileInfo(files[i]);     
}
Array.Sort(fi, new FileLengthReverseComparer());
1
Suppir
24 / 24 / 10
Регистрация: 08.08.2011
Сообщений: 1,155
24.09.2014, 16:32  [ТС] #4
Сейчас попробую, спасибо.

Добавлено через 6 минут
Learx, мы в итоге получили отсортированный массив fi, который состоит из FIleInfo. А нужно получить отсортированный (по размеру файлов) массив с именами файлов.
0
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,486
24.09.2014, 17:03 #5
Suppir, так создайте новый массив и заполните его newMas[i] = fi[i].Name
1
Suppir
24 / 24 / 10
Регистрация: 08.08.2011
Сообщений: 1,155
24.09.2014, 17:06  [ТС] #6
Да, так и сделал, спасибо.
0
24.09.2014, 17:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2014, 17:06
Привет! Вот еще темы с решениями:

Метод с возможностью осуществлять поиск файлов и папок по имени размеру, датам создания, доступа и модификации
Не могу найти подходящею функцию возможность осуществлять поиск файлов и папок...

Linq без цикла foreach
вот пример var linq = from t in...

Linq без использования FrameWork 3.5
Здравствуйте,уважаемые! Я разработал автоматизированную обучающую систему с...

Поиск дубликатов без LINQ
Есть список объектов класса Class1. public class Class1 { public int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru