ADN Club > AutoLisp / VisualLISP и DCL

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

(1/6) > >>

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


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

Андрей Бушман:

--- Цитата: lavrik от 30-01-2015, 05:51:50 --- а не создавал копию Чертеж_2014-09-25-13-37-10 и так далее каждую секунду
--- Конец цитаты ---
обозначенная программа (кстати, ссылка указывает в никуда) не делает сохранений каждую секунду, но создаёт резервную копию строго по требованию пользователя.

--- Цитата: lavrik от 30-01-2015, 05:51:50 ---И вообщем мне нужно чтобы было просто имя Чертежа, один файл который каждый раз пересохраняется при нажатие бэкапа.
--- Конец цитаты ---
просто пересохраняться - это команда _qsave или комбинация клавиш Ctrl + S.

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

Александр Ривилис:

--- Цитата: lavrik от 30-01-2015, 05:51:50 ---и так далее каждую секунду
--- Конец цитаты ---
И как ты себе это вообще представляешь?
1) А если время сохранения чертежа > 1 секунды?
2) За секунду пользователь не сможет ничего сделать с чертежом - чертеж будет в лучшем случае только сохраняться и никаких полезных действий не будет. Сохранять чертеж в фоновом процессе нельзя.

Андрей Бушман:
Автор в курсе, что вопрос задан непонятным образом и не соответствует тому, о чём он хочет спросить на самом деле. Тем не менее он решил просто скопировать на этот форум исходную, некорректную версию своего вопроса, не утруждая себя его корректировкой, мол пусть читающие сами догадываются. Это либо банальное неуважение к тем, кому адресован вопрос, либо безграмотность (не знаю, что из этого "лучше").

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

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии