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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как лиспом поменять дату создания файла?

Как лиспом поменять дату создания файла?

Ответ
Поиск в этой теме
Непрочитано 09.11.2017, 17:39 #1
Как лиспом поменять дату создания файла?
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,787

Собственно суть проблемы такова - необходимо установить дату создания файла. Нашел решение на VB[A] (убрал ненужные проверки и вычисления):
Код:
[Выделить все]
Public Sub test()
    Dim strFile As String
    strFile = "d:\test.txt"
    Set objShell = CreateObject("Shell.Application")
    Set objfolder = objShell.Namespace("d:\")
    Set objfile = objfolder.ParseName("test.txt")
    objfile.ModifyDate = "20.10.2015 16:00:00"
    Set objfile = Nothing
    Set objfolder = Nothing
    Set objShell = Nothing
End Sub
Работает, все хорошо. Но на лиспе что-то ну никак не срабатывает, кричит о неправильном формате данных.
Код:
[Выделить все]
 (setq dest     "d:\\test.txt"
      obj      (vlax-get-or-create-object "Shell.Application")
      o_folder (vlax-invoke-method obj 'namespace (vl-filename-directory dest))
      o_file   (vlax-invoke-method
                 o_folder
                 'parsename
                 (strcat (vl-filename-base dest) (vl-filename-extension dest))
                 ) ;_ end of vlax-invoke-method
      ) ;_ end of setq
(vlax-invoke-method o_file 'modifydate "20.10.2015 16:00:00")
Собственно вопрос - в каком формате надо засовывать данные в последнюю строчку лиспового кода? На ответ "почему" даже не надеюсь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 1698
 
Непрочитано 09.11.2017, 19:37
2 | #2
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
'modifydate "20.10.2015 16:00:00"
Конечно не так. Отвечу на "почему". Потому, что в файловой системе дата-время записаны в специальном формате, и только отображаются так, как задано в Региональных. И каждый раз преобразуется для записи.

Есть специальные функции наподобие
Код:
[Выделить все]
 
function TryEncodeDate(Year, Month, Day: Word; out Date: TDateTime): Boolean;
var
  I: Integer;
  DayTable: PDayTable;
begin
  Result := False;
  DayTable := @MonthDays[IsLeapYear(Year)];
  if (Year >= 1) and (Year <= 9999) and (Month >= 1) and (Month <= 12) and
    (Day >= 1) and (Day <= DayTable^[Month]) then
  begin
    for I := 1 to Month - 1 do Inc(Day, DayTable^[i]);
    I := Year - 1;
    Date := I * 365 + I div 4 - I div 100 + I div 400 + Day - DateDelta;
    Result := True;
  end;
end;
Вот они и преобразуют. А ты преобразуй для ЛИСП. Хотя проще сделать свой COM, которому передавать отдельные элементы.

Видимо внутри VBA это и работает. Но и там "20.10.2015 16:00:00" может неправильно сработать, попробуй-ка изменить формат даты в региональных.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 09.11.2017, 19:44
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Т.е. загонять количество дней от 1.01.0001 и время соответственно с начала суток? Интересно, надо будет попробовать поиграться
Спасибо!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.11.2017, 03:30
1 | #4
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Т.е. загонять количество дней от 1.01.0001
от 1900.01.01
Код:
[Выделить все]
 (vlax-put o_file 'modifydate 42297.625)

Последний раз редактировалось Vov.Ka, 10.11.2017 в 03:52.
Vov.Ka вне форума  
 
Автор темы   Непрочитано 10.11.2017, 07:32
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Vov.Ka, спасибо Буду искать / писать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как лиспом поменять дату создания файла?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск команды после создания файла. shartal Программирование 27 13.09.2011 17:22
Lisp. Проблема после копирование стиля несущего элемента (ADT) из файла молодой человек LISP 1 02.05.2011 22:56
Как присоединить к одному чертежу (из 1ого файла) кусок продолжение (из 2ого)? star282 AutoCAD 13 17.03.2011 12:13
Название файла в блок(лисп) ? maksimys AutoCAD 3 19.10.2007 15:32
Частичное открытие файла - не активно при открытии файла ADik AutoCAD 4 22.06.2006 07:35