Перезаписать XML-файл на сетевом диске

#xml #vb.net #linq #xelement #network-drive

#xml #vb.net #linq #xelement #сетевой диск

Вопрос:

Я хочу отредактировать XML-файл. Я могу открывать, редактировать и сохранять (перезаписывать) файл на локальном диске.

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

     Dim localPath As String = "C:...file.xml" 'works

    Dim networkPath As String = "Y:...file.xml"   'doesnt work
    Dim networkPath2 As String = "\my.network.local...file.xml" 'doesnt work

    Dim doc As XElement
    doc = XElement.Load(networkPath)

    doc.Save(networkPath)
 

Я получаю это исключение, когда пытаюсь сохранить: System.IO.IOException: «Запрос не поддерживается».

Спасибо за вашу помощь.

Комментарии:

1. Не могли бы вы обработать его локально и переместить / скопировать обратно в сеть?

2. Да, это то, что я сделаю, если проблема не будет решена. Но у меня уже есть довольно большой проект, в котором мне пришлось бы многое изменить.

3. У вас есть разрешение на запись в файл? Вы администратор? VS не запускается автоматически от имени администратора. Вы должны щелкнуть правой кнопкой мыши ярлык и выбрать Запуск от имени администратора. Если вы являетесь администратором, вам необходимо использовать знак доллара в имени пути, чтобы предоставить права администратора.

4. Я администратор и имею права на запись на диске. Например, я могу нормально перезаписать текстовый файл. Запуск от имени администратора и знак доллара не показали никакой разницы.

5. Ошибка возникает только при сохранении? Можете ли вы перейти к файлу на сетевом диске и открыть его с помощью блокнота, а затем сохранить его?

Ответ №1:

Была такая же проблема с

 ...writeAllLines(...)
 

Мое решение:

  1. создать резервную копию исходного файла (file.bak.xml )
  2. удалить исходный файл
  3. сохраните новый файл
  4. успех? да -> удалить файл bak; нет-> получить файл bak как исходный файл
      If File.Exists(path) = False Then
    
         doc.Save(path)
    
     Else
             Dim temp As String = path amp; ".bak.xml"
             File.Move(path, temp)
    
             Try
                 doc.Save(path)
                 File.Delete(temp)
             Catch ex As Exception
                 File.Move(temp, path)               
             End Try
    
         End If