Как присвоить атрибут даты изменения файлу на сервере? Использую SMBJ библиотеку
Для копирования файла я использую такую конструкцию:
SmbFiles.copy(local_file_path, share, path_for_server, true);
Но она лишь копирует файл на сервер при этом не присваивая атрибуты локального файла такие как дата создания, изменения. Как я понял метод copy не обладает подобными возможностями.
Для этого у меня есть другой код который может присвоить атрибуты файлу на сервере, но только с другого удаленного файла на том же самом сервере:
try (DiskShare share = (DiskShare) session.connectShare(shareName)) {
String original = path + "2.txt"; // file name on the server
String dest = path + "4.txt"; // file name on the server
FileBasicInformation current = share.getFileInformation(original, FileBasicInformation.class);
long newAttrs = current.getFileAttributes() ^ FileAttributes.FILE_ATTRIBUTE_READONLY.getValue();
FileBasicInformation update = new FileBasicInformation(
current.getCreationTime(),
current.getLastAccessTime(),
current.getLastWriteTime(),
current.getChangeTime(),
newAttrs
);
DiskEntry e = share.open(dest, EnumSet.of(AccessMask.FILE_WRITE_ATTRIBUTES), (Set) null,
SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OPEN, (Set) null);
e.setFileInformation(update);
} catch (
IOException e) {
e.printStackTrace();
}
Вопрос в том как при копировании локального файла на сервер так-же перенести его атрибуты?
Пробовал подставить вместо current.getChangeTime()... вывод из базового пакета java nio.file.attribute.FileTime, так-как SMBJ внутри имеет такой же класс и обращается к нему за выводом, но FileBasicInformation принимает данные только от внутренних классов, может есть другой способ, стандартный для данной библиотеки.
Буду рад любым предложениям. Спасибо.
Ответы (1 шт):
Решение найденно: Запросить дату модификации локального файла через Date, конвертировать вывод lastModDate с помощью FileTime обязательно из библиотеки SMBJ не из nio,
fileTime передать в FileBasicInformation.
File file = new java.io.File(String.valueOf(localfile));
Date lastModDate = new Date(file.lastModified());
com.hierynomus.msdtyp.FileTime fileTime = FileTime.fromDate(lastModDate);
long newAttrs = ....
FileBasicInformation update = new FileBasicInformation(
current.getCreationTime(),
current.getLastAccessTime(),
fileTime,
current.getChangeTime(),
newAttrs
);
DiskEntry e = ....