| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание резервного копирования чертежей .dwg

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

Ответ
Поиск в этой теме
Непрочитано 20.01.2015, 15:12 #1
Создание резервного копирования чертежей .dwg
termitt
 
Регистрация: 13.03.2014
Сообщений: 22

Всем привет. Да это возможно это повтор похожей темы http://forum.dwg.ru/showthread.php?t=53301 Пожалуйста не закрывайте мою тему, она отличается. Мне нужно чтобы создание бэкапа (backup) чтобы сам файл .dwg себя перезаписывал, а не создавал копию Чертеж_2014-09-25-13-37-10 и так далее каждую секунду, пример показан на скриншоте № 1. В языках программирования я очень слаб и тяжело, что-то исправлять в коде . И вообщем мне нужно чтобы было просто имя Чертежа, один файл который каждый раз пересохраняется при нажатие бэкапа. Код написан на языке .NET. Вот источник https://sites.google.com/site/bushma...ab/backupfiles
Код:
[Выделить все]
   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:  }
Для удобства нашел строку где задаются значения о дате времени час и т.д и т.п
скриншот №2
За ранее спасибо!

Миниатюры
Нажмите на изображение для увеличения
Название: скриншот 1.jpg
Просмотров: 78
Размер:	81.5 Кб
ID:	142214  Нажмите на изображение для увеличения
Название: скриншот 2.jpg
Просмотров: 71
Размер:	34.7 Кб
ID:	142215  

Просмотров: 5292
 
Непрочитано 20.01.2015, 15:28
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
чтобы сам файл .dwg себя перезаписывал
А если просто нажать "Сохранить"???
trir вне форума  
 
Автор темы   Непрочитано 20.01.2015, 15:37
#3
termitt


 
Регистрация: 13.03.2014
Сообщений: 22


Цитата:
Сообщение от trir Посмотреть сообщение
А если просто нажать "Сохранить"???
ах да слегка не договорил. надо чтобы у пользователя локально на машине сохранялось и сервере (я сам сделаю, знаю как) для того что скачка эл\энергии или винт сгорел(это конечно ваще редкость, но приказы начальства не обсуждаются) и чертеж был сохранен на сервере (так называемый бэкап) или даже можно сделать это как автосохранение на машине локально и на сервере)
termitt вне форума  
 
Непрочитано 20.01.2015, 15:53
#4
G-E-K

КМ, КЖ, инж. IIк
 
Регистрация: 24.09.2011
СНГ
Сообщений: 849


Держать автосохранения (.sv$) на сервере?
G-E-K вне форума  
 
Автор темы   Непрочитано 20.01.2015, 16:05
#5
termitt


 
Регистрация: 13.03.2014
Сообщений: 22


Цитата:
Сообщение от G-E-K Посмотреть сообщение
Держать автосохранения (.sv$) на сервере?
насчет автосохранения, я что-то погорячился. лучше сделаю бэкап через определенный промежуток времени.
termitt вне форума  
 
Непрочитано 20.01.2015, 16:22
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Save + Hard link ?
ИМХО, самый простой и легко реализуемый вариант. Никакого программирования, одно администрирование =о)

ЗЫ.
А почему не обратится к автору кода и не попросить его внести некоторые изменения, найти автора не сложно...
Boxa вне форума  
 
Непрочитано 20.01.2015, 17:02
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от termitt Посмотреть сообщение
Для удобства нашел строку где задаются значения о дате времени час и т.д и т.п
скриншот №2
А в строках 183-185 собственно сохранение копии чертежа. Но, учитывая
Цитата:
Сообщение от termitt Посмотреть сообщение
В языках программирования я очень слаб и тяжело, что-то исправлять в коде
и возможные последствия (материальные потери) в случае неправильной реализации - то присоединяюсь к Boxa - проще связаться с автором, имхо.
Сергей812 вне форума  
 
Непрочитано 20.01.2015, 18:39
#8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
надо чтобы у пользователя локально на машине сохранялось и сервере
А не надо локально, пусть работает на сервере - с внешними ссылками проще будет
trir вне форума  
 
Автор темы   Непрочитано 21.01.2015, 05:21
#9
termitt


 
Регистрация: 13.03.2014
Сообщений: 22


А тут на форуме dwg Андрей Бушман сидит?
termitt вне форума  
 
Непрочитано 21.01.2015, 07:37
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


На том ресурсе, откуда взяли код - контакты в разделе "Главная страница". Здесь на форуме, если не ошибаюсь, его ник bargool.
Сергей812 вне форума  
 
Непрочитано 21.01.2015, 09:33
#11
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


hwd и на этот форум он не ходит.
Boxa вне форума  
 
Непрочитано 21.01.2015, 10:42
#12
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
На том ресурсе, откуда взяли код - контакты в разделе "Главная страница". Здесь на форуме, если не ошибаюсь, его ник bargool.
Нене, ник Андрея на этом форуме - hwd, но он вроде сюда не заходит..
__________________
Алексей
bargool вне форума  
 
Непрочитано 21.01.2015, 11:48
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Offtop: Извините, Алексей. Просто тоже часто видел ваш ник на ресурсах, посвященных NetApi AutoCAD программированию. И почему то подумал, что вы с hwd - один и тот же человек)
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание резервного копирования чертежей .dwg

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# .net Создание Layout для чертежей, оформленных в модели bargool Готовые программы 649 18.11.2023 23:13
Программа для резервного копирования информации _Oleg_ Прочее. Программное обеспечение 16 21.10.2016 15:21
Как отключить создание каждый раз нового файла .bak при нажатии на кнопку "Сохранить" или при закрытии любого файла .dwg в Автокад 2008? gve2005 AutoCAD 4 30.10.2009 10:30
Создание списка чертежей из Sheet Set Manager krokh AutoCAD 2 20.06.2008 16:46