Функция С# GetFiles из метода каталога

Я использую Directory.GetFiles(string,string), который находит все файлы определенного типа. Если у меня есть два разных типа файлов с одинаковыми именами, но разными расширениями, можно ли гарантировать, что эти заполненные списки файлов абсолютно совпадают?

e.g)

Псевдокод

 List1 -> getfiles(dir,filetype2)
 List2 -> getfiles(dir,filetype2)

будут ли в списке 1 и в списке 2 гарантированно одинаковые совпадающие файлы? Я уверен, что так и будет, но интересно, какие обстоятельства могут быть разными?

Правильный регистр

 List1[4] is "2esDSd.filetype1"
 List2[4] is "2esDSd.filetype2"

Неправильный регистр

 List1[4] is "3esDSd.filetype1"
 List2[4] is "2esDSd.filetype2"

Я знаю, что всегда могу написать еще один дополнительный уровень проверки или сортировки, так как все еще возможен неверный ввод. Но интересно, это хорошая практика или нет необходимости делать/проверять, учитывая, как работает внутренняя функция.


person Dexters    schedule 21.02.2013    source источник
comment
Ну, вы не можете полагаться исключительно на файловую систему, потому что ее содержимое может измениться во время выполнения. ЕСЛИ вам нужно гарантировать некоторые критерии - напишите собственный модуль проверки.   -  person Ilya Ivanov    schedule 21.02.2013
comment
Dexters Лично я думаю, что было бы намного логичнее, если бы вы написали код, который пытаетесь внедрить или использовать, и объяснили оттуда, где могут возникнуть ваши проблемы или опасения.   -  person MethodMan    schedule 21.02.2013


Ответы (1)


Вы можете «гарантировать» это только в том случае, если файловая система действительно содержит соответствующие файлы. И в этом случае было бы лучше убедиться, что вы получаете имена файлов в алфавитном порядке, например:

Псевдокод

List1 -> getfiles(dir,filetype2).OrderBy(x => x.FileName).ToList();
List2 -> getfiles(dir,filetype2).OrderBy(x => x.FileName).ToList();

Однако, как я уже сказал, это зависит от существующих правильных файлов и от вашего файлового фильтра (скажем, «*.jpg»), который не соответствует файлам, у которых нет близнецов в вашем каталоге.

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

Псевдокод

for each filename f1 in List1
    get matchine file name f2 in List2
    if it exists, add (f1, f2) to results

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

person Roy Dictus    schedule 21.02.2013