Ошибка длинных путей в Windows? - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть следующий файл:

C:\Users\Jan\Documents\Visual Studio 2010\Projects\AzureTests\Build\82df3c44-0482-47a7-a5d8-9b39a79cf359.cskpg\WebRole1_778722b2-eb95-476d-af6a-917f269a0814.cssx\39e5cb39-cd18-4e1a-9c25-72bd1ad41b49.csman

Я могу нормально открыть этот файл через открытое окно в notepad ++ или через проводник.Однако открытие через окно «Выполнить» не работает.Это дает диалог «не могу найти файл».Когда я запрашиваю файловую систему в C # с помощью:

var dir = new DirectoryInfo(@"C:\Users\Jan\...")
var fil = dir.GetFiles("*.csman")[0];

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

var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(fil.FullName);

Поскольку это не удается с«неправильные данные в (1,1)» ошибка.Потому что XmlDocument считает, что файл пуст.Однако File.ReadAllBytes в этом файле выполняется успешно.Это работает:

var buf = File.ReadAllBytes(fil.FullName);
using (var ms = new MemoryStream())
{
    ms.Write(buf, 0, (int) buf.Length);
    ms.Seek(0, SeekOrigin.Begin);
    xmlDoc.Load(ms);
}

Проблема не возникает при звонке ...

xmlDoc.Save(fil.FullName);

Может кто-нибудь объяснить, что здесь происходит?

Ответы [ 2 ]

7 голосов
/ 23 декабря 2011

XmlDocument.LoadXml ожидает строку, которая непосредственно содержит данные XML.

Параметры xml Тип: System.String Строка, содержащая документ XML для загрузки.

Поэтому он интерпретирует строку пути, как если бы это был XML (что, очевидно, будет недопустимым, поэтому генерируется исключение).

Используйте XmlDocument.Load метод вместо.

Параметры filename Тип: System.String URL-адрес файла, содержащего XML-документ для загрузки.URL-адрес может быть локальным файлом или URL-адресом HTTP (веб-адресом).

Вы не столкнетесь с проблемой при вызове XmlDocument.Save, потому что, как и Load, это единственный параметр, представляющий путь к файлу.

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

2 голосов
/ 23 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...