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

Я столкнулся с неожиданной проблемой с получением только полных имен файлов верхнего каталога из определенного каталога. C# выдает ошибку и ничего не перечисляет в определенном каталоге. Но у MS DOS нет проблем с моей командой: *"dir C:\windows\prefetch\*.pf"

Visual Basics 6 старая "Dir Function" также делает это без нареканий. «Проводник Windows» открывает его и ничего у меня не спрашивает. Кроме того, "Nirsofts Tool Suit" мгновенно и без проблем выводит список. Ни один из этих инструментов не нужно запускать со специальными разрешениями, просто дважды щелкните значок приложения, и все готово.

Я осмотрелся и не нашел здесь ничего, что могло бы ответить на эту странную проблему. Мой пользователь может получить доступ к каталогу, если я войду в него с любым другим приложением, теперь возникает вопрос, почему С# выдает «Исключение неавторизованного доступа», что совершенно странно, поскольку у меня есть доступ к этой папке.

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

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

Вот мой код, который терпит неудачу (используя System.IO):

private void button1_Click(object sender, EventArgs e)
    {

        textBox1.Text = textBox1.Text.Substring(0, 0); //clear the textBox1

        //Unauthorized access exception and yellow bar in this line
        foreach(string FileX in Directory.GetFiles(Path.Combine(Environment.GetEnvironmentVariable("windir"), "prefetch"), "*.pf"))
        {
            textBox1.Text += FileX;
        }
    }

person feedwall    schedule 06.08.2013    source источник
comment
предоставление вашего кода позволит нам найти причину   -  person Arshad    schedule 06.08.2013
comment
эта ошибка возникает во время отладки или после установки   -  person Arshad    schedule 06.08.2013
comment
Вместо того, чтобы искать *.pf файлов, вы можете попробовать перечислить все - *, какой результат вы получите?   -  person Dimitar Dimitrov    schedule 06.08.2013
comment
Не используйте гото. Не используйте Application.DoEvents. Не очищайте текстовое поле, отправляя ему ключи. Не используйте Sleeps в потоке пользовательского интерфейса. Это большой блок кода НЕ ДЕЛАЙТЕ ЭТОГО. Сделайте себе одолжение, избавьтесь от мышления VB и изучите программирование. Вам будет намного легче помочь с вашими проблемами, если ваша текущая проблема изолирована, а не похоронена в куче других проблем.   -  person nvoigt    schedule 06.08.2013
comment
Жесткий, но эффективный @nvoigt... фидволл, работает ли он, если вы попадаете в каталог через диалоговое окно FolderBrowserDialog?   -  person Sayse    schedule 06.08.2013


Ответы (1)


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

 private void button1_Click(object sender, EventArgs e)
    {
        string folder = @"C:\windows\prefetch";
        string filemask = @"*.pf";
        string[] filelist = Directory.GetFiles(folder, (filemask));

        //now use filelist[i] for any operations. 
    }
person jzr    schedule 06.08.2013
comment
хорошо, вы пробовали только простой код? мой работает в отладке и как опубликованный exe. Однако у меня Win8 Pro x64. Удачи. - person jzr; 07.08.2013