IRDump Ответов: 4

Недопустимые символы в исключении пути


Привет Я написал рекурсивную функцию в VS2008 с языком C# для сканирования всех папок на определенном диске.
я использовал систему.Функции Ввода-Вывода .
он здесь:
private void scan(string DriveName)
     {
         string[] Directories = Directory.GetDirectories(DriveName);
         foreach (string foldername in Directories)
         {
             scan(foldername);                // recursive call
             listBox1.Items.Add(foldername);  // Add Everything To My List
         }
     }


но у меня есть проблема с этим .когда я хочу сканировать диск, у которого есть папка с именем" $#%$#^|b a b a k %&%&#$#@||"
Я сталкиваюсь с исключением, которое называется "незаконные символы в исключении пути". как я могу ее решить?
я хочу проверить все папки с незаконными именами.я хочу использовать только классы и функции Dot net framework !

пожалуйста, пришлите мне свою идею : [Email удален]
Большое спасибо!.

Monjurul Habib

Отредактировано: кодовый блок.

Christian Graus

Публиковать свой адрес электронной почты глупо. Веб-боты сканируют интернет в поисках таких глупых людей и помещают их в списки спама.

Philippe Mori

На самом деле, из приведенного выше примера имени только символ | является недопустимым символом в пути. Если вы хотите получить доступ к такому каталогу, то переименуйте его во что-то действительное.

Недопустимыми символами, о которых сообщает Проводник Windows, являются\|:*? "<>/. Все эти символы имеют особое значение в командной строке.

4 Ответов

Рейтинг:
2

Dave Kreskowiak

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

В краткосрочной перспективе оберните свой вызов GetDirectories в блок Try/Catch и сообщите об ошибке пользователю. Вы не сможете получить всю подпапку из-за ошибки. Вы не можете перейти в папку, в названии которой используются запрещенные символы. Классы .NET вообще не будут работать в этих папках.

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


Рейтинг:
2

parmar_punit

перед обработкой используйте некоторую проверку типа......

private void scan(string path)
{
    if (Directory.Exists(path))
    {
        DirectoryInfo di = new DirectoryInfo(path);
        DirectoryInfo[] Directories = di.GetDirectories("*",SearchOption.AllDirectories);

        foreach (var item in Directories)
        {
            listBox1.Items.Add(item.Name);// Add Everything To My List
            foreach (var fileItem in item.GetFiles())
            {
                listBox1.Items.Add("   " + fileItem.Name);//Add Everything To My List
            }
            scan(item.FullName);// recursive call
        }
    }
}


IRDump

это не сработало .
я не могу получить это исключение .
спасибо тебе за все

Рейтинг:
1

sabbi26

ПРИВЕТ,

Перед отправкой значений каталогов в строковый массив зашифруйте имена каталогов и передайте их в виде массива byte [], а затем отсканируйте имена.

Пример Кода Для Шифрования:

private byte[] encodeProcess(string DriveName)
{
    int[] AddInt = new int[DriveName.Length];
    byte[] AddByte = new byte[DriveName.Length];
    for (int i = 0; i < DriveName.Length; i++)
        AddInt[i] = (int)DriveName[i];
    for (int j = 0; j < DriveName.Length; j++)
        AddByte[j] = (byte)AddInt[j];
    return AddByte;
}


Примечание: символы кодируются в формате UTF-8 и затем используют его.

Воспользуйтесь Этой Ссылкой Это Будет Полезно: http://msdn.microsoft.com/en-us/library/system.text.utf8encoding(против.71).aspx-файл


IRDump

как я могу его использовать ?
у меня проблема с " каталогом.GetDirectories(Имя Диска);"

Рейтинг:
0

IRDump

привет,
спасибо, что ответили .
Я могу сделать это в vb6 с помощью COM (Activex DLL) & (.Net Interop service).
но я хочу сделать это с помощью функций. netframework.



Большое спасибо.