Можно ли объяснить этот причудливый катастрофический отказ во времени выполнения.NET?

var tds = document.getElementById("ctl00_ContentPlaceHolder1_Jobs_dlItems_ctl01_a").getElementsByTagName("td");
time = tds[0].firstChild.value;
address = tds[3].firstChild.value;
5
задан RichieHindle 27 August 2009 в 07:38
поделиться

9 ответов

Вы можете попробовать изучить код для System.IO.Path.GetFiles () с .NET Reflector . На первый взгляд, очевидно, что он вызывает только String.Substring () , чтобы разделить что-то с конца пути и добавить обратно ближе к концу метода. Он проверяет Path.DirectorySeparatorChar (обратная косая черта, '\' ) и Path.AltDirectorySeparatorChar (косая черта, '/' ) на определить индекс и длину подстроки.

Я предполагаю, что недопустимые имена файлов или папок в Юникоде сбивают с толку метод.

2
ответ дан 14 December 2019 в 13:43
поделиться

Угадайте ... есть ли имена файлов, передаваемых в качестве аргументов, длиннее 256 символов? Стандартные функции System.IO платформы .Net не могут обрабатывать файлы с более длинными именами.

1
ответ дан 14 December 2019 в 13:43
поделиться

Начиная с версии 3.0, оператор печати должен быть записан как функция ...

ваш

print (b, end = '')

становится

print ("end =", b)

Есть ли какое-то искажение в определении каждой части строки пути из-за забавных символов? Просто наблюдение, так как подстрока не работает.

Надеюсь, что это поможет, и удачи! Сообщите нам, какое решение вы нашли, оно наверняка окажется интересным.

1
ответ дан 14 December 2019 в 13:43
поделиться

Возможно, вы могли бы предоставить некоторые сведения о клиенте, у которого возникла проблема. Вещи как: 1. Название и версия ОС. 2. Язык ОС 3. Версия .Net, на которую вы нацеливаетесь, по сравнению с версией .Net, которую использует клиент.

В пути к каталогу могут быть символы Юникода, из-за которых длина строки может быть меньше одной или нескольких.

Другое примечание: текст исключения предполагает, что ваша программа была написана на управляемом C ++. Вы не вмешиваетесь в какие-либо неуправляемые манипуляции со строками?

Я мог бы предложить, если вы можете, изменить диагностику, чтобы фиксировать фактическую переменную пути, которая вызывает ошибку. Возможное правдоподобное объяснение: http://support.microsoft.com/kb/943804/

1
ответ дан 14 December 2019 в 13:43
поделиться

Возможно, это как-то связано с обфускатором. И обфукатор все портит. Попробуйте запустить код без обфускатора. И опубликуйте свои результаты.

редактировать: Вы можете воспроизвести аварию?

0
ответ дан 14 December 2019 в 13:43
поделиться

Первым и единственным вопросом должен был быть: «Вы запустили ChkDsk?»

1
ответ дан 14 December 2019 в 13:43
поделиться

Не уверен, что это связано, но я использую GetFiles в Visual C ++, он вылетал при перечислении содержимого C :, оказалось, что у меня была папка с испорченными разрешениями из предыдущего установить. Я вернул папку моему текущему пользователю, и он устранил сбой.

0
ответ дан 14 December 2019 в 13:43
поделиться

Исходя из источника и ваших комментариев, я подозреваю, что путь UNC вызывает проблемы с возможным разрешением безопасности или поделиться проблемой разрешения. Например, если пользователь отключил создание имен файлов 8.3, у вас определенно возникнут проблемы с UNC-путями, потому что из-за этого поставщик сети не сможет получить правильные имена файлов в Windows 2000 и Windows XP. (Я забыл, в каких пакетах обновления была исправлена ​​эта ошибка.)

Ниже приводится важный исходный код.

    String tempStr = Path.InternalCombine(fullPath, searchPattern);

    // If path ends in a trailing slash (\), append a * or we'll
    // get a "Cannot find the file specified" exception
    char lastChar = tempStr[tempStr.Length-1];
    if (lastChar == Path.DirectorySeparatorChar || lastChar == Path.AltDirectorySeparatorChar || lastChar == Path.VolumeSeparatorChar) 
        tempStr = tempStr + '*';

    fullPath = Path.GetDirectoryName(tempStr); 
    BCLDebug.Assert((fullPath != null),"fullpath can't be null!");

    String searchCriteria;
    bool trailingSlash = false;
    bool trailingSlashUserPath = false;

    lastChar = fullPath[fullPath.Length-1];
    trailingSlash = (lastChar == Path.DirectorySeparatorChar) || (lastChar == Path.AltDirectorySeparatorChar); 

    if (trailingSlash) {
        // Can happen if the path is C:\temp, in which case GetDirectoryName would return C:\ 
        searchCriteria = tempStr.Substring(fullPath.Length);
    }
    else
        searchCriteria = tempStr.Substring(fullPath.Length + 1); 
0
ответ дан 14 December 2019 в 13:43
поделиться

Есть ли возможность быстро запрограммировать консольное приложение и запустить его в режиме отладки. Обычно перебирают весь файловый каталог с помощью метода GetFiles. Может быть, что-то ударится, и вы сможете быстро найти проблемный файл?

0
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: