Создание резервного копирования чертежей .dwg

Автор Тема: Создание резервного копирования чертежей .dwg  (Прочитано 19399 раз)

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

Оффлайн lavrikАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Всем привет. Мне нужно чтобы после создание бэкапа (backup) чтобы сам файл .dwg себя перезаписывал, а не создавал копию Чертеж_2014-09-25-13-37-10 и так далее каждую секунду, пример показан на скриншоте № 1. В языках программирования я очень слаб и тяжело, что-то исправлять в коде . И вообщем мне нужно чтобы было просто имя Чертежа, один файл который каждый раз пересохраняется при нажатие бэкапа. Может кто нить поправить код и очень буду рад если скомпилируете его. Код написан на языке .NET. Вот источник https://sites.google.com/site/bushma...ab/backupfiles

Код - C# [Выбрать]
  1.    1:  //**************************************
  2.    2:  // DrawingQuickCopy.cs
  3.    3:  // DrawingQuickCopy. © Andrey Bushman, 2012
  4.    4:  // Quick creating of the drawing's backup file into the some subdirectory.
  5.    5:  // https://sites.google.com/site/bushmansnetlaboratory/sendbox/lab/backupfiles
  6.    6:  //**************************************
  7.    7:  using System;
  8.    8:  using System.Collections.Generic;
  9.    9:  using System.Linq;
  10.   10:  using System.Text;
  11.   11:  using System.IO;
  12.   12:  using System.Xml.Linq;
  13.   13:  
  14.   14:  // Autodesk
  15.   15:  using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  16.   16:  using App = Autodesk.AutoCAD.ApplicationServices;
  17.   17:  using Db = Autodesk.AutoCAD.DatabaseServices;
  18.   18:  using Ed = Autodesk.AutoCAD.EditorInput;
  19.   19:  using Rtm = Autodesk.AutoCAD.Runtime;
  20.   20:  
  21.   21:  [assembly: Rtm.CommandClass(typeof(Bushman.CAD.Commands.DwgQuickCopy
  22.   22:      .DrawingQuickCopy))]
  23.   23:  
  24.   24:  namespace Bushman.CAD.Commands.DwgQuickCopy {
  25.   25:      /// <summary>
  26.   26:      /// Класс содержит метод резервного копирования файлов чертежей
  27.   27:      /// </summary>
  28.   28:      public sealed class DrawingQuickCopy : Rtm.IExtensionApplication {
  29.   29:  
  30.   30:          const String xmlSettingsFileName = "DrawingQuickCopy.Settings.xml";
  31.   31:          const String cmdNamespace = "Bushman"; // Command's namespace
  32.   32:          const String helpFileName = "DrawingQuickCopyHelp.chm"; // Help file name
  33.   33:          const String topicName = "DwgQuickCopy"; // Topic's name in the CHM file
  34.   34:  
  35.   35:          //--- XML tags ---
  36.   36:          const String rootXmlTag = "Settings";
  37.   37:          const String backupDirectoryXmlTag = "BackupDirectoryName";
  38.   38:          const String modSuffixXmlTag = "ModSuffix";
  39.   39:          //----------------
  40.   40:  
  41.   41:          String assemblyLocation;
  42.   42:          String backupDirectoryName;
  43.   43:          String modSuffix;
  44.   44:  
  45.   45:          /// <summary>
  46.   46:          /// Инициализация переменных нужными значениями
  47.   47:          /// </summary>
  48.   48:          void Initialize() {
  49.   49:              assemblyLocation = Path.GetDirectoryName(GetType().Assembly
  50.   50:                  .Location);
  51.   51:              assemblyLocation = assemblyLocation.EndsWith(@"\") ?
  52.   52:                  assemblyLocation.Substring(0,
  53.   53:                  assemblyLocation.Length - 1) : assemblyLocation;
  54.   54:  
  55.   55:              String xmlFileFullName = Path.Combine(assemblyLocation,
  56.   56:                  xmlSettingsFileName);
  57.   57:  
  58.   58:              if (!File.Exists(xmlFileFullName)) {
  59.   59:                  CreateSettingsFile(xmlFileFullName);
  60.   60:              }
  61.   61:  
  62.   62:              XElement xml = XElement.Load(xmlFileFullName);
  63.   63:  
  64.   64:              if (xml == null) {
  65.   65:                  CreateSettingsFile(xmlFileFullName);
  66.   66:              }
  67.   67:  
  68.   68:              backupDirectoryName = xml.Element(backupDirectoryXmlTag).Value
  69.   69:                  .Trim();
  70.   70:              modSuffix = xml.Element(modSuffixXmlTag).Value.Trim();
  71.   71:          }
  72.   72:  
  73.   73:          /// <summary>
  74.   74:          /// Создание и сохранение файла настроек
  75.   75:          /// </summary>
  76.   76:          /// <param name="fileName">Полное имя файла</param>
  77.   77:          void CreateSettingsFile(String fileName) {
  78.   78:              XElement xml = new XElement(rootXmlTag);
  79.   79:              xml.Add(new XComment(Resources.BackupDirectoryName));
  80.   80:              xml.Add(new XElement(backupDirectoryXmlTag, "QuickSaves"));
  81.   81:              xml.Add(new XComment(Resources.ModSuffix));
  82.   82:              xml.Add(new XElement(modSuffixXmlTag, "(modified)"));
  83.   83:              xml.Save(fileName);
  84.   84:          }
  85.   85:  
  86.   86:          /// <summary>
  87.   87:          /// Сохранение резервной копии файла в специальном подкаталоге каталога
  88.   88:          /// текущего чертежа.
  89.   89:          /// Если искомый каталог резервного копирования отсутствует, то он
  90.   90:          /// автоматически создаётся. Если не удаётся создать каталог резервного
  91.   91:          /// копирования, то операция отменяется, а на консоль автокада выводится
  92.   92:          /// сообщение о невозможности создания резервной копии файла.
  93.   93:          /// </summary>
  94.   94:          [Rtm.CommandMethod(cmdNamespace, "DwgQuickCopy",
  95.   95:              "localNameIdDwgQuickCopy",
  96.   96:              Rtm.CommandFlags.Modal, null, helpFileName, topicName)]
  97.   97:          public void BackupFileSave() {
  98.   98:              Initialize();
  99.   99:              const String separator1 = "-";
  100.  100:              const String separator2 = "_";
  101.  101:  
  102.  102:              App.Document doc = cad.DocumentManager.MdiActiveDocument;
  103.  103:              Db.Database db = doc.Database;
  104.  104:              Ed.Editor ed = doc.Editor;
  105.  105:  
  106.  106:              StringBuilder sb = new StringBuilder();
  107.  107:              String docLocation = (String)cad.GetSystemVariable("DwgPrefix");
  108.  108:              docLocation = docLocation.EndsWith(@"\") ? docLocation.Substring(0,
  109.  109:                  docLocation.Length - 1) : docLocation;
  110.  110:              String backupDirectoryFullName = String.Empty;
  111.  111:  
  112.  112:              if (String.Equals(docLocation, assemblyLocation,
  113.  113:                  StringComparison.CurrentCultureIgnoreCase)) {
  114.  114:                  backupDirectoryFullName = Environment.GetFolderPath(
  115.  115:                      Environment.SpecialFolder.MyDocuments);
  116.  116:              }
  117.  117:              else {
  118.  118:                  backupDirectoryFullName = docLocation;
  119.  119:              }
  120.  120:  
  121.  121:              backupDirectoryFullName = Path.Combine(backupDirectoryFullName,
  122.  122:                  backupDirectoryName);
  123.  123:  
  124.  124:              DirectoryInfo backupDirectory = new DirectoryInfo(Environment
  125.  125:                  .ExpandEnvironmentVariables(backupDirectoryFullName));
  126.  126:  
  127.  127:              if (!Directory.Exists(backupDirectoryFullName)) {
  128.  128:                  try {
  129.  129:                      Directory.CreateDirectory(backupDirectoryFullName);
  130.  130:                  }
  131.  131:                  catch (Exception ex) {
  132.  132:                      ed.WriteMessage(ex.Message);
  133.  133:                      return;
  134.  134:                  }
  135.  135:              }
  136.  136:  
  137.  137:              backupDirectory = new DirectoryInfo(backupDirectoryFullName);
  138.  138:              String dwgName = (String)cad.GetSystemVariable("DwgName");
  139.  139:  
  140.  140:              // Если выполняется попытка резервного копирования файла, который
  141.  141:              // расположен не в каталоге резервного копирования, то создаём его
  142.  142:              // (файла) копию в каталоге резервного копирования
  143.  143:              if (new DirectoryInfo(docLocation).Name != backupDirectory.Name) {
  144.  144:                  try {
  145.  145:                      // Если каталога резервного копирования ещё нет - создаём
  146.  146:                      // его.
  147.  147:                      if (!backupDirectory.Exists) {
  148.  148:                          backupDirectory.Create();
  149.  149:                      }
  150.  150:  
  151.  151:                      //Формируем имя файла резервной копии чертежа...
  152.  152:                      sb.Append(Path.Combine(backupDirectory.FullName, dwgName
  153.  153:                          .Substring(0, dwgName.Length - 4)));
  154.  154:                      DateTime time = DateTime.Now;
  155.  155:  
  156.  156:                      //Версия бэкапа
  157.  157:                      String x = String.Format(
  158.  158:                          "{1}{2}{0}{3}{0}{4}{1}{5}{0}{6}{0}{7}.dwg", separator1,
  159.  159:                          separator2, time.Year, time.Month.ToString("D2"),
  160.  160:                          time.Day.ToString("D2"), time.Hour.ToString("D2"),
  161.  161:                          time.Minute.ToString("D2"), time.Second.ToString("D2"));
  162.  162:                      sb.Append(x);
  163.  163:                  }
  164.  164:                  catch (System.Exception ex) {
  165.  165:                      ed.WriteMessage(String.Format("\n{0}: \"{1}\".\n{2}\n",
  166.  166:                          Resources.CantCreateQuickSaveDir, backupDirectoryName,
  167.  167:                          ex.Message));
  168.  168:                      ed.WriteMessage(String.Format(Resources.QuickCopyNotCreated,
  169.  169:                          Environment.NewLine));
  170.  170:                      return;
  171.  171:                  }
  172.  172:              }
  173.  173:              // Если выполняется попытка создания резервной копии файла, который
  174.  174:              // уже находится в каталоге резервного копирования, то в этом же
  175.  175:              // каталоге создать файл с тем же именем, но помеченым в конце
  176.  176:              // атрибутом, обозначенным в переменной modifyLabel
  177.  177:              else {
  178.  178:                  sb.Append(Path.Combine(docLocation, dwgName.Substring(0,
  179.  179:                      dwgName.Length - 4) +
  180.  180:                      separator2 + modSuffix));
  181.  181:              }
  182.  182:  
  183.  183:              using (Db.Database db2 = db.Wblock()) {
  184.  184:                  db2.SaveAs(sb.ToString(), Db.DwgVersion.Current);
  185.  185:              }
  186.  186:              ed.WriteMessage("\n{0}: \"{1}\"\n", Resources.QuickCopyCreated,
  187.  187:                  sb.ToString());
  188.  188:          }
  189.  189:  
  190.  190:          #region IExtensionApplication Members
  191.  191:  
  192.  192:          void Rtm.IExtensionApplication.Initialize() {
  193.  193:              App.Document doc = cad.DocumentManager.MdiActiveDocument;
  194.  194:              if (null == doc)
  195.  195:                  return;
  196.  196:              Ed.Editor ed = doc.Editor;
  197.  197:              ed.WriteMessage("\n{0}. {1}\n\n", Resources.ApplicationName,
  198.  198:                  Resources.Copyright);
  199.  199:          }
  200.  200:  
  201.  201:          public void Terminate() {
  202.  202:              // is empty
  203.  203:          }
  204.  204:          #endregion
  205.  205:      }
  206.  206:  }
« Последнее редактирование: 30-01-2015, 15:37:54 от Александр Ривилис »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
а не создавал копию Чертеж_2014-09-25-13-37-10 и так далее каждую секунду
обозначенная программа (кстати, ссылка указывает в никуда) не делает сохранений каждую секунду, но создаёт резервную копию строго по требованию пользователя.
И вообщем мне нужно чтобы было просто имя Чертежа, один файл который каждый раз пересохраняется при нажатие бэкапа.
просто пересохраняться - это команда _qsave или комбинация клавиш Ctrl + S.

Обозначенная утилита (DwgQuickCopy) создаёт контрольные точки сохранения, дабы в случае чего, пользователь мог использовать любую из них (так сказать, выполнить откат к искомой промежуточной фазе проектирования).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
и так далее каждую секунду
И как ты себе это вообще представляешь?
1) А если время сохранения чертежа > 1 секунды?
2) За секунду пользователь не сможет ничего сделать с чертежом - чертеж будет в лучшем случае только сохраняться и никаких полезных действий не будет. Сохранять чертеж в фоновом процессе нельзя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Автор в курсе, что вопрос задан непонятным образом и не соответствует тому, о чём он хочет спросить на самом деле. Тем не менее он решил просто скопировать на этот форум исходную, некорректную версию своего вопроса, не утруждая себя его корректировкой, мол пусть читающие сами догадываются. Это либо банальное неуважение к тем, кому адресован вопрос, либо безграмотность (не знаю, что из этого "лучше").

Оффлайн lavrikАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
нее я конечно дико извиняюсь, что не подправил текст своего вопроса и отправил сюда вам на форум. Сейчас постараюсь еще раз все объяснить. Мне нужно, что в автокаде когда я делаю бекап с помощью команды DwgQuickCopy, не надо чтобы бэкап не был с таким названием Пример_2014-12-11_15-31-40. Нужно чтобы был просто Пример(без даты и времени) и это бэкап перезаписывался сам себя. И быть может вы не поняли меня или опять я плохо объяснил насчет каждых секунд сохранения бэкапа. Он сам автоматически ничего не сохраняется каждую секунду -я это сам знаю. Он сохраняется когда пользователь сам вызывает команду DwgQuickCopy. Все я сделал кнопку с помощью такого макроса ^C^C_DwgQuickCopy _qsave  и этим макросом он пересохраняет сам чертеж с командой (qsave) и пересохраняет бэкап на сервере с командой (DwgQuickCopy) . Андрей, вы как разработчик этой программы должны меня понимать, мне просто не нужны эти цифры _2014-12-11_15-31-40 простая перезапись dwg файла. Я конечно оставлю и ту версию кода и но мне нужна слегка измененная (которую я вам постарался объяснил)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Сейчас постараюсь еще раз все объяснить. Мне нужно, что в автокаде когда я делаю бекап с помощью команды DwgQuickCopy, не надо чтобы бэкап не был с таким названием Пример_2014-12-11_15-31-40.
Млин, ну нужно же читать свой текст, прежде чем опубликовывать его...  :( Вот что это за "казнить нельзя помиловать"?

Цитировать
Нужно чтобы был просто Пример(без даты и времени) и это бэкап перезаписывался сам себя.
Как раз это и делает штатная команда _qsave. В свете таких "очепяток", порой у меня складывается впечатление, что пишет инностранец, используя для перевода Google translate. Повторюсь - желательно читать свой текст до его публикации.

Цитировать
Он сохраняется когда пользователь сам вызывает команду DwgQuickCopy.
Он не сохраняется. Вместо этого, в определённом каталоге (настраивается в конфиг-файле) создаётся резервная копия его текущего содержимого (т.е. новый dwg файл) с отметкой времени создания.

Цитировать
Андрей, вы как разработчик этой программы должны меня понимать, мне просто не нужны эти цифры _2014-12-11_15-31-40 простая перезапись dwg файла. Я конечно оставлю и ту версию кода и но мне нужна слегка измененная (которую я вам постарался объяснил)
Объяснение таково, что мне приходится больше догадываться о том, что же именно нужно...  :( Т.е. на сервере вместо создания последовательных резервных копий нужно каждый раз перезаписывать одноимённую копию текущего чертежа?

Оффлайн lavrikАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Объяснение таково, что мне приходится больше догадываться о том, что же именно нужно...   Т.е. на сервере вместо создания последовательных резервных копий нужно каждый раз перезаписывать одноимённую копию текущего чертежа?
да да именно это мне и надо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
да да именно это мне и надо!
Если да, то зачем огород городить? Достаточно сделать два последовательных сохранения:
1) Сохранить на сервер с заданным именем.
2) Сохранить с исходным именем.
Или я чего-то не понимаю?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн lavrikАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Если да, то зачем огород городить? Достаточно сделать два последовательных сохранения:
1) Сохранить на сервер с заданным именем.
2) Сохранить с исходным именем.
Или я чего-то не понимаю?
да именно так. мне надо чтобы и на машине локально сохранилось и в это время на сервере.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
да именно так. мне надо чтобы и на машине локально сохранилось и в это время на сервере.
И для этой цели нужно целое .NET-приложение если можно обойтись несколькими стоками на lisp?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн lavrikАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
И для этой цели нужно целое .NET-приложение если можно обойтись несколькими стоками на lisp?
а есть такой лисп??? я просто не знаю, если ваще такой лисп.. увидел программу Андрея Бушмана и думал от неё плясать со своей затеей)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
несколькими стоками на lisp?
Согласен. Набросал LISP вариант, но в нём использовал USERS5. Работает, но нужно вместо этого заюзать X-записи, чтобы каждый dwg сохранял в себе путь к соответствующему каталогу на сервере. Покажите эти "несколько строк". В лиспе я не силён:

Код - Auto/Visual Lisp [Выбрать]
  1. ;; Команда сохраняет текущий чертёж, а так же создаёт его текущую копию в
  2. ;; некотором дополнительном каталоге (например на сервере).
  3. ;; Каталог, в котором должна создаваться одноимённая копия, хранится в
  4. ;; переменной USERS5 этого файла. Если значение не указано, то файл сохраняется
  5. ;; в каталог, указанный ниже в коде, в переменной defaultPath. Указывая путь,
  6. ;; необходимо вместо символов \ использовать символы /.
  7. (defun c:save_with_server_copy ()
  8.   (vl-load-com)
  9.   (if (= (getvar "savename") "") (progn (princ (strcat "Прежде чем пользоваться "
  10.     "этой командой, Вы должны хотя бы один раз сохранить текущий чертёж. "
  11.     "Операция отклонена."))
  12.     (princ))
  13.     (progn
  14.       (setq fd (getvar "filedia")
  15.             dwgname (getvar "dwgname")
  16.             ; В переменной USERS5 храним значение целевого серверного каталога.
  17.             ; Если в переменной USERS5 не задано значение, то используем некоторое
  18.             ; значение по умолчанию (defaultPath). Значение ОБЯЗАТЕЛЬНО должно
  19.       ; завершаться символом /.
  20.             user5 (vl-string-trim " \t\n" (getvar "USERS5"))
  21.       ; Серверный каталог, используемый по умолчанию
  22.             defaultPath "//aleph/Обмен/Бушман/default/" ; Последний символ - /.
  23.             serverDir (if (= user5 "") defaultPath user5)
  24.             dwgCopyName (strcat serverdir dwgname)
  25.             )      
  26.       (setvar "filedia" 0)
  27.      
  28.       (command "_qsave") ; Сохранение текущего чертежа
  29.       ; Сохранение копии на сервер
  30.       (if (null (findfile dwgCopyName))
  31.         (command "_.save" dwgCopyName)
  32.         (command "_.save" dwgCopyName "_y"))
  33.      
  34.       (if (= user5 "") (princ (strcat "\nВНИМАНИЕ! В текущем DWG файле переменная "
  35.         "USERS5 не содержит указания серверного каталога! Копия сохранена как '"
  36.         dwgCopyName "'.\n"))
  37.         (princ (strcat "Копия сохранена как '" dwgCopyName "'.\n")))
  38.       (princ)
  39.      
  40.       (setvar "filedia" fd))))
Текущая версия лиспа не сохраняет значение между сессиями автокада, поэтому нужно переписать с использованием xrecord.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Второй вариант (значение серверного пути сохраняется между сессиями):

Код - Auto/Visual Lisp [Выбрать]
  1. ;; Команда сохраняет текущий чертёж, а так же создаёт его текущую копию в
  2. ;; некотором дополнительном каталоге (например на сервере).
  3. ;; Каталог, в котором должна создаваться одноимённая копия, хранится в
  4. ;; переменной ServerPath (в реестре). Если значение не указано, то файл
  5. ;; сохраняется в каталог, указанный ниже в коде (см. переменную defaultPath).
  6. ;; Указывая путь, необходимо вместо символов \ использовать символы /.
  7. ;;
  8. ;; Получение значения переменной ServerPath:
  9. ;;  (getenv "ServerPath")
  10. ;; Назначение нового значения переменной ServerPath:
  11. ;;  (setenv "ServerPath" "//aleph/Обмен/Бушман/some_project/")
  12. ;; ===================================
  13. (defun c:save_with_server_copy ()
  14.   (vl-load-com)
  15.   (if (= (getvar "savename") "") (progn (princ (strcat "Прежде чем пользоваться "
  16.     "этой командой, Вы должны хотя бы один раз сохранить текущий чертёж. "
  17.     "Операция отклонена."))
  18.     (princ))
  19.     (progn
  20.       (setq fd (getvar "filedia")
  21.             dwgname (getvar "dwgname")
  22.             ; В переменной ServerPath храним значение целевого серверного каталога.
  23.             ; Если в переменной ServerPath не задано значение, то используем некоторое
  24.             ; значение по умолчанию (defaultPath). Значение ОБЯЗАТЕЛЬНО должно
  25.       ; завершаться символом /.
  26.             _path (getenv "ServerPath")
  27.       ; Серверный каталог, используемый по умолчанию
  28.             defaultPath "//aleph/Обмен/Бушман/default/" ; Последний символ - /.
  29.             serverDir (if (null _path) defaultPath _path)
  30.             dwgCopyName (strcat serverdir dwgname)
  31.             )      
  32.       (setvar "filedia" 0)
  33.      
  34.       (command "_qsave") ; Сохранение текущего чертежа
  35.       ; Сохранение копии на сервер
  36.       (if (null (findfile dwgCopyName))
  37.         (command "_.save" dwgCopyName)
  38.         (command "_.save" dwgCopyName "_y"))
  39.      
  40.       (if (null _path) (princ (strcat "\nВНИМАНИЕ! В текущем DWG файле переменная "
  41.         "ServerPath не содержит указания серверного каталога! Копия сохранена как '"
  42.         dwgCopyName "'.\n"))
  43.         (princ (strcat "Копия сохранена как '" dwgCopyName "'.\n")))
  44.       (princ)
  45.      
  46.       (setvar "filedia" fd))))
getvar и setvar хранят значения в реестре, связывая их с именем конкретного файла. Это плохо, т.к. если файл удалить и создать снова, то вызов в нём getvar вернёт значение пути, хотя по смыслу оно относилось к тому файлу, который был удалён. Кроме того, поскольку путь к серверному каталогу хранится в реестре, то на др. машине он найден не будет, в результате чего файл будет сохранён в defaultPath.

Всё же лучше внести правку в код так, чтобы использовать xrecord.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
getvar и setvar
Андрей, ты ж вроде используешь getenv :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Андрей, ты ж вроде используешь getenv
согласен, оговорился  :D