Неверный URL-адрес файла в OpenOffice с использованием C#

Я пытаюсь работать с документом OpenOffice Calc под C# и получаю сообщение об ошибке «URL-адрес не поддерживается для сети». Мой код:

string filePath="serverName\\folder\\file.ods";
filePath = "file:///" + filePath.Replace(@"\", "/");

PropertyValue[] props = new PropertyValue[0];
XComponent oDoc = loader.loadComponentFromURL(AFile, "_blank", 0, props);

Ошибка возникает только для файлов в сети. Когда я использую:

string filePath="C:\\folder\\file.ods";

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


person Gleb    schedule 04.08.2015    source источник


Ответы (3)


Я узнаю, что было не так. Проблема заключалась в том, что файл находился в папке, имя которой выглядело как «Имя пользователя#Файлы». На самом деле проблема заключается в символе «#». Когда я заменяю его на «% 23» (кодирование в виде URL-адреса), все работает нормально.

ОБНОВЛЕНИЕ:

Лучший способ использовать System.Uri для преобразования пути:

string filePath="\\servername\folder\UserName#Files\file.ext";
Uri fileUri=new Uri(filePath);
filePath=fileUri.Absolute.Uri;
person Gleb    schedule 04.08.2015
comment
В качестве примечания, вам следует использовать методы System.IO.Path (Path.Combine и т. д.) и обычно работать со строго типизированными объектами, просто чтобы предотвратить такого рода проблемы. - person thomasb; 04.08.2015

Попробуй использовать:

string filePath="serverName\\folder\\file.ods";
filePath = "//" + filePath.Replace(@"\", "/");
person Backs    schedule 04.08.2015
comment
Я пытаюсь, но это не работает с тем же исключением. - person Gleb; 04.08.2015

Я не вижу причин, по которым вы используете @ в функции замены, так как функция Replace заменяет все \ на /

string filePath="serverName\\folder\\file.ods";
filePath = "file://" + filePath.Replace("\", "/");
person Learner    schedule 04.08.2015
comment
Я пытаюсь, но это не работает с тем же исключением. - person Gleb; 04.08.2015
comment
Да пробовал это. Я использую @, потому что \ - это управляющая последовательность. - person Gleb; 04.08.2015
comment
Я знаю, что это побег sequence, но зачем он в Replace. Вы должны передать //, чтобы указать путь. я не думаю, что это требуется - person Learner; 04.08.2015
comment
Не понимаю, что вы имеете в виду. Код, который вы разместили: filePath = file:// + filePath.Replace(\, /); не будет компилироваться. - person Gleb; 04.08.2015