Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: sangvinik128 от 18-12-2019, 11:56:15

Название: Версия AutoCAD
Отправлено: sangvinik128 от 18-12-2019, 11:56:15
Здравствуйте, могу ли я как-то узнать, в какой версии AutoCAD был сохранен DWG - файл ?  Я поискал в справке, но нашёл только св-во Version объекта Application, но это мне ничего не даёт 
Название: Re: Версия AutoCAD
Отправлено: Александр Ривилис от 18-12-2019, 11:58:21
Здравствуйте, могу ли я как-то узнать, в какой версии AutoCAD был сохранен DWG - файл ?
По первым шести байтам dwg-файла: https://en.wikipedia.org/wiki/.dwg
Название: Re: Версия AutoCAD
Отправлено: Александр Ривилис от 18-12-2019, 11:58:53
могу ли я как-то узнать, в какой версии AutoCAD был сохранен DWG - файл ?
В какой версии или в формате какой версии? Это разные вещи.
Название: Re: Версия AutoCAD
Отправлено: sangvinik128 от 18-12-2019, 12:02:57
могу ли я как-то узнать, в какой версии AutoCAD был сохранен DWG - файл ?
В какой версии или в формате какой версии? Это разные вещи.
В формате какой версии
Название: Re: Версия AutoCAD
Отправлено: Александр Ривилис от 18-12-2019, 12:05:33
В формате какой версии
Ну тогда я дал правильную ссылку - не открывая в AutoCAD dwg-файл ты можешь определить в формате какой версии сохранён файл по первым шести байтам файла.
Название: Re: Версия AutoCAD
Отправлено: sangvinik128 от 18-12-2019, 12:06:36
В формате какой версии
Ну тогда я дал правильную ссылку - не открывая в AutoCAD dwg-файл ты можешь определить в формате какой версии сохранён файл по первым шести байтам файла.
Да, я Вас понял, спасибо !
Название: Re: Версия AutoCAD
Отправлено: sangvinik128 от 18-12-2019, 14:56:17
Здравствуйте, могу ли я как-то узнать, в какой версии AutoCAD был сохранен DWG - файл ?
По первым шести байтам dwg-файла: https://en.wikipedia.org/wiki/.dwg
А точно ли по первым шести байтам ?
Название: Re: Версия AutoCAD
Отправлено: Александр Ривилис от 18-12-2019, 15:00:54
А точно ли по первым шести байтам ?
Точно. Формат первых шести байт: ACNNNN. Будем считать от "AC1001" до "AC1032" на данный момент.
Название: Re: Версия AutoCAD
Отправлено: sangvinik128 от 18-12-2019, 15:29:50
Понять не могу. Таким кодом считываю 6 начальных байт. Здесь FilePath - полное имя файла, а AcadVersion - переменная, в которую сохраняется значение. Некоторые файлы вообще ничего не передают в AcadVersion, точнее передают, но нули :
Код - Visual Basic [Выбрать]
  1.     Open FilePath For Binary Access Read As #1
  2.     Dim AcadVersion As Variant
  3.     AcadVersion = Input(6, #1)
  4.     MsgBox (AcadVersion)
Название: Re: Версия AutoCAD
Отправлено: Александр Ривилис от 18-12-2019, 15:48:40
sangvinik128,
Может не Input. а Get ?
Код - Visual Basic [Выбрать]
  1. Open FilePath For Binary Access Read As #1
  2. Dim AcadVersion(6) As Byte
  3. Get #1,6, AcadVersion
  4. Close #1
(на VBA не пишу)

Название: Re: Версия AutoCAD
Отправлено: sangvinik128 от 18-12-2019, 15:53:21
sangvinik128,
Может не Input. а Get ?
Код - Visual Basic [Выбрать]
  1. Open FilePath For Binary Access Read As #1
  2. Dim AcadVersion(6) As Byte
  3. Get #1,6, AcadVersion
  4. Close #1
(на VBA не пишу)
Это был мой первый вариант, не удаётся, увы
Название: Re: Версия AutoCAD
Отправлено: Александр Ривилис от 18-12-2019, 15:55:27
Нашел вот такую функцию:
Код - Visual Basic [Выбрать]
  1. Public Function GetDwgVersion(ByVal sFileName As String) As String
  2.   Dim hFile As Long
  3.   Dim bt12 As Byte
  4.  
  5.   hFile = FreeFile
  6.   Open sFileName For Binary As #hFile
  7.   Dim i As Integer, strVersion As String
  8.   For i = 1 To 6
  9.     Get #hFile, i, bt12
  10.     strVersion = strVersion & Chr(bt12)
  11.   Next i
  12.   Close #hFile
  13.   GetDwgVersion = strVersion
  14. End Function

Проверяй.
Название: Re: Версия AutoCAD
Отправлено: sangvinik128 от 18-12-2019, 15:59:52
Нашел вот такую функцию:
Код - Visual Basic [Выбрать]
  1. Public Function GetDwgVersion(ByVal sFileName As String) As String
  2.   Dim hFile As Long
  3.   Dim bt12 As Byte
  4.  
  5.   hFile = FreeFile
  6.   Open sFileName For Binary As #hFile
  7.   Dim i As Integer, strVersion As String
  8.   For i = 1 To 6
  9.     Get #hFile, i, bt12
  10.     strVersion = strVersion & Chr(bt12)
  11.   Next i
  12.   Close #hFile
  13.   GetDwgVersion = strVersion
  14. End Function

Проверяй.
Работает. Что же я неправильно делал, буду разбираться, спасибо Вам !
Название: Re: Версия AutoCAD
Отправлено: Александр Ривилис от 18-12-2019, 16:13:41
Что же я неправильно делал
Второй параметр Get задаёт не количество байт, а номер байта в файле, с которого начинается чтение. А количество считываемых за один раз байт определяется размером переменной, в которую происходит считывание.