Проблема IO.Path.Copy (From,To) внутри процедуры новой команды

Автор Тема: Проблема IO.Path.Copy (From,To) внутри процедуры новой команды  (Прочитано 6878 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я это понял, но неужели теперь нужно создавать новую тему о создании копии файла?
Еще раз. Один вопрос - одна тема.
Судя по всему чертеж еще не был ни разу сохранён. Соответственно у него нет имени и соответственно acAppComObj.ActiveDocument.FullName возвращает пустую строку. Об этом говорит и сообщение об ошибке:
Цитировать
System.ArgumentException: Empty file name is not legal.
Parameter name: sourceFileName
Ну и ко всему прочему нельзя копировать загруженный в редактор AutoCAD dwg-файл, так как с большой вероятностью ты получишь копию, которую нельзя будет открыть в AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 21-08-2015, 09:52:03

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Проблема: пишу модуль, в котором перед началом процедуры нужно сохранить копию исходного файла чертежа

Код - vb.net [Выбрать]
  1. Imports System
  2. Imports System.Runtime.InteropServices
  3. Imports System.Windows.Forms
  4.  
  5. Imports Autodesk.AutoCAD.Interop
  6. Imports Autodesk.AutoCAD.Runtime
  7.  
  8. ...
  9.         <CommandMethod("ReconfigurerLayoutsToPDF")> _
  10.         Public Sub ReconfigurerLayoutsToPDF()
  11.  
  12.             'Dim acAppComObj As AcadApplication
  13.  
  14.             Dim acAppComObj As AcadApplication
  15.             acAppComObj = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
  16.  
  17.             Dim acDocComObj As AcadDocument
  18.             acDocComObj = acAppComObj.ActiveDocument
  19.  
  20.  
  21.             If acDocComObj.Saved = False Then
  22.                 Dim result As Integer
  23.  
  24.                 result = MsgBox("Перед запуском процедуры сохраните Ваш чертеж!" & vbCr & "Сохранить чертеж?", MsgBoxStyle.YesNo, "Вопрос")
  25.                 If result = vbYes Then
  26.                     acDocComObj.Save()
  27.                 Else
  28.                 End If
  29.             End If
  30.  
  31.             MsgBox("Изменения произойдут в файле: " & vbCr & acAppComObj.ActiveDocument.FullName)
  32.  
  33.             IO.File.Copy(acAppComObj.ActiveDocument.FullName, IO.Path.GetTempFileName & _
  34.                                                                       IO.Path.GetFileNameWithoutExtension(acAppComObj.ActiveDocument.FullName) & "_copy.dwg")
  35.  
  36.             For i = 0 To acDocComObj.Layouts.Count - 1
  37.                 Select Case acDocComObj.Layouts.Item(i).Name
  38.                     Case Is <> "Model", "Модель"
  39.                             '...
  40.                                     'Весь код не стал выкладывать
  41.                 End Select
  42.  
  43.                 If acDocComObj.Layouts.Item(i).Name <> "Model" Then
  44.                     If acDocComObj.Layouts.Item(i).Name <> "Модель" Then
  45.                         ' Для текущего листа зададим каноническое имя формата печати: DWG_To_PDF_Gallurgy.pc3
  46.                             With acDocComObj.Layouts.Item(i)
  47.                                 .ConfigName = "DWG_To_PDF_Gallurgy.pc3"
  48.                                 .CanonicalMediaName = glCanonicalMediaName
  49.                                 .PaperUnits = 1
  50.                                 .PlotHidden = False
  51.                                 .PlotOrigin = {0, 0}
  52.                                 .PlotRotation = 0
  53.                                 LowerLeft = {xMin, yMin} ' pTo
  54.                                 UpperRight = {xMax, yMax} 'pTo
  55.                                 .SetWindowToPlot(LowerLeft, UpperRight)
  56.                                 .UseStandardScale = True
  57.                                 .SetCustomScale(1, 1)
  58.                                 .PlotType = 4
  59.                                 .CenterPlot = True
  60.                                 .PlotViewportBorders = True
  61.                                 .PlotViewportsFirst = True
  62.                                 .PlotWithLineweights = True
  63.                                 .PlotWithPlotStyles = True
  64.                                 .StyleSheet = IIf(glColored = True, "acad.ctb", "monochrome.ctb")
  65.                                 acDocComObj.Utility.Prompt("   Установлены следующие параметры листа:" & vbCrLf)
  66.                                 acDocComObj.Utility.Prompt("   1. Формат: " & glCanonicalMediaName & "(" & glFormatClassic & ")" & vbCrLf)
  67.                                 acDocComObj.Utility.Prompt("   2. Размеры: " & ДлинаГлобальная & "x" & ШиринаГлобальная & vbCrLf)
  68.                                 acDocComObj.Utility.Prompt("   3. Цвет печати: " & IIf(glColored = True, "acad.ctb", "monochrome.ctb") & vbCrLf)
  69.                                 acDocComObj.Utility.Prompt("   4. Начало области печати: " & xMin & "," & yMin & vbCrLf)
  70.                                 acDocComObj.Utility.Prompt("   5. Конец области печати: " & xMax & "," & yMax & vbCrLf)
  71.                             End With
  72.                         End If
  73.                     End If
  74.                 End If
  75.                 '...
  76.             Next i
  77.         End Sub

в строке:

Код - vb.net [Выбрать]
  1.             IO.File.Copy(acAppComObj.ActiveDocument.FullName, IO.Path.GetTempFileName & _
  2.                                                                       IO.Path.GetFileNameWithoutExtension(acAppComObj.ActiveDocument.FullName) & "_copy.dwg")

происходит ошибка!

Решение: после длительного обсуждения и тестирования модуля выяснилось, что такая ошибка выпадает только в случае, если модуль пытается скопировать файл, который еще не сохранен!

Поэтому разумным решением было обработать ошибку следующим образом:

Код - vb.net [Выбрать]
  1.             On Error Resume Next
  2.             IO.File.Copy(acAppComObj.ActiveDocument.FullName, IO.Path.GetTempFileName & _
  3.                                                                       IO.Path.GetFileNameWithoutExtension(acAppComObj.ActiveDocument.FullName) & "_copy.dwg")
  4.             If Err.Number > 0 Then
  5.                 MsgBox("Невозможно создать копию файла! Сохраните файл и повторите попытку!")
  6.                 Exit Sub
  7.             End If




Большущее спасибо Александру Ревилису за его быстрые ответы и конечно же за его могучее терпение, которое он проявил при обсуждении данной проблемы!
« Последнее редактирование: 21-08-2015, 09:51:59 от Александр Ривилис »

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Перечитай мой ответ.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Эта тема теперь не нужна, раз ее решение настолько просто ))) Как удалить эту тему?

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Эта тема теперь не нужна, раз ее решение настолько просто )))
Напиши в чем заключается решение. Для тех, кто будет читать эту тему. И не забывай про кнопку "Решение" (как у меня написано в подписи).
Как удалить эту тему?
Пусть остаётся для тех, кто столкнётся с этой же ошибкой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Хорошо, но только вот над Вашим ответом я не вижу галочку РЕШЕНИЕ. В другой теме она была, а в этой ее нет! И почему-то я не могу добавить Вам карму!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Напиши в чем заключалось Решение, а я отмечу это сообщение как решение. Карму я дума. не можешь добавить, потому что уже недавно добавлял. Такие правила.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Ясно! Решение написал в вопросе, если не туда написал, могу переделать ) И еще раз спасибо!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Всё нормально. Быстро учишься. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение