Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GetFiles неправильно ищет файлы 
:(
    Опции темы
CompWorm
  Дата 26.4.2013, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



привет всем!

подскажите, почему на
Код

            string gg = "c:";
            string[] currentFile = Directory.GetFiles(gg);
            Console.WriteLine(currentFile[0]);

и
Код

            string gg = "c:\\";
            string[] currentFile = Directory.GetFiles(gg);
            Console.WriteLine(currentFile[0]);

выводит первый файл на диске, как и положено, а на
Код

            string gg = "d:";
            string[] currentFile = Directory.GetFiles(gg);
            Console.WriteLine(currentFile[0]);

выводит "d:\название моей программы", которой в этой папке конечно нет ?

вот в с++ и дельфи в любую процедуру можно во время отладки залезть по F11, а в шарпе, я в GetFiles зайти не могу... не понимаю, что там происходит и как обработать такую ошибку  smile 

аналогичная проблема у чувака на MSDN (смотри последний коммент) осталась без ответа.


--------------------
PM MAIL   Вверх
Roha
Дата 26.4.2013, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



Выполни и все поймешь 
Код

Console.WriteLine(Path.GetFullPath("c:"));
Console.WriteLine(Path.GetFullPath("c:\\"));
Console.WriteLine(Path.GetFullPath("d:"));
Console.WriteLine(Path.GetFullPath("d:\\"));

PM MAIL   Вверх
CompWorm
Дата 26.4.2013, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



куда смотрит GetFiles  я и без этого вывода знаю)))) это очевидно. 
мне непонятно почему так происходит и какие еще не задокументированные сюрпризы бывают при работе с файлами и папками...
я к сожалению не могу вручную протестировать поведение при e: f: итп, а так же формат сетевых адресов.

кстати по поводу формата, помогите пожалуйста составить regex для замены имён типа d и d: на d:\\ чтобы этот глюк скрыть  smile

Добавлено через 3 минуты и 28 секунд
кстати, если в качестве пути ввести случайные символы, он попытается найти папку с таким названием в  GetCurrentDirectory  smile 
так что в regex надо добавить проверку на наличие буквы диска и двоеточия хотя бы)))


--------------------
PM MAIL   Вверх
SKrivosein
Дата 27.4.2013, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



CompWorm при условиях: Windows 7 SP1, .NET 4 - 4.5 и дисках c:, d:, f: 
мне при всех попытках ввода такого типа "d:" не получилось достич такого глюка. На всех дисках всё нашло нормально. При вводе типа "d", да пытаеться найти чего то в актуальной директории, а потом выкидывает исключение. Что собственно и ожидаемо, потому как ищем в несуществующей директории. А что случится при воде допустим "w:\" ?

Короче я написал коротенькую каляку
Код

class Program
    {
        static void Main(string[] args)
        {
            string gg = Console.ReadLine();
            
            //региксы так на всякий случай, здесь у нас получился зелёный бордель, потому что C# разметка на Винград не умеет читать правильно @ перед строкой :)
            if (Regex.IsMatch(gg, @"^([a-zA-Z]{1}[:]{1})$"))
                gg += @"\";          
            else if (Regex.IsMatch(gg, @"^([a-zA-Z]{1})$"))
                gg += @":\";

            if (Directory.Exists(gg))   //проверка если директория существует
            {
                string[] currentFile = Directory.GetFiles(gg);

                foreach (string f in currentFile)
                    Console.WriteLine(f);
            }
            else
                Console.WriteLine(gg + "не найдено!");

            Console.ReadLine();
        }
    }


Это сообщение отредактировал(а) SKrivosein - 27.4.2013, 10:36


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.