Примеры работы с файлами

Средний

Важно. Для корректной работы приведенных ниже примеров кода необходимо подключить пространство имен Terrasoft.Common.

using Terrasoft.Common;

Пример. Получить экземпляр класса, реализующего интерфейс IFile.

// Получаем фабрику файлов.
IFileFactory fileFactory = UserConnection.GetFileFactory();
// Создаем файловый локатор для файла с идентификатором recordId, который хранится в таблице БД
// "ActivityFile" ("Файлы и ссылки" для объекта "Activity").
var fileLocator = new EntityFileLocator("ActivityFile", recordId);
// Передаем сформированный локатор в метод Get фабрики.
IFile file = fileFactory.Get(fileLocator);
// В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который 
// можно производить другие манипуляции с файлом и его содержимым.
// Создаем файловый локатор для файла с идентификатором recordId, который хранится в таблице БД 
// "ActivityFile" ("Файлы и ссылки" для объекта "Activity").
var fileLocator = new EntityFileLocator("ActivityFile", recordId);
// Передаем сформированный локатор в расширяющий метод GetFile.
IFile file = UserConnection.GetFile(fileLocator);
// В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который
// можно производить другие манипуляции с файлом и его содержимым.

// Получаем фабрику файлов.
IFileFactory fileFactory = UserConnection.GetFileFactory();
// Создаем уникальный идентификатор нового файла.
Guid recordId = Guid.NewGuid();
// Создаем файловый локатор для нового файла с идентификатором recordId, который хранится в таблице БД 
// "ActivityFile" ("Файлы и ссылки" для объекта "Activity").
var fileLocator= new EntityFileLocator("ActivityFile", recordId);
// Передаем сформированный локатор в метод Create фабрики.
IFile file = fileFactory.Create(fileLocator);
// В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который
// можно производить другие манипуляции с файлом и его содержимым.
// Создаем уникальный идентификатор нового файла.
Guid recordId = Guid.NewGuid();
// Создаем файловый локатор для нового файла с идентификатором recordId, который хранится в таблице БД 
// "ActivityFile" ("Файлы и ссылки" для объекта "Activity").
var fileLocator= new EntityFileLocator("ActivityFile", recordId);
// Передаем сформированный локатор в расширяющий метод CreateFile.
IFile file = UserConnection.CreateFile(fileLocator);
// В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который
// можно производить другие манипуляции с файлом и его содержимым.

Пример. Создать новый файл с привязкой к записи раздела Активности (Activities).

Создание нового файла
// Создаем уникальный идентификатор нового файла.
Guid fileId = Guid.NewGuid();
// Создаем файловый локатор для нового файла.
var fileLocator= new EntityFileLocator("ActivityFile", fileId);
// Получаем объект IFile для нового файла.
IFile file = UserConnection.CreateFile(fileLocator);
// В хранилищах еще не сохранены ни метаданные нового файла, ни его контент.
// Задаем имя файлу в его метаданных.
file.Name = "New file";
// Устанавливаем новому файлу атрибут: привязываем этот файл к записи Активности с ключом activityId. 
// Это тоже метаданные файла.
file.SetAttribute("ActivityId", activityId);
// Сохраняем метаданные файла. Это нужно делать обязательно ПЕРЕД сохранением его контента.
file.Save();
// byte[] content — это контент файла.
var content = new byte[] {0x12, 0x34, 0x56};
using (var stream = new MemoryStream(content)) {
    // Сохраняем контент в БД.
    // FileWriteOptions.SinglePart означает, что весь контент передается одним непрерывным куском.
    file.Write(stream, FileWriteOptions.SinglePart); 
}

Пример. Получить содержимое файла.

Чтение содержимого файла
var content = new byte[]();
// Получаем файл по его локатору.
var fileLocator= new EntityFileLocator("ActivityFile", recordId);
IFile file = UserConnection.GetFile(fileLocator);
// Читаем все содержимое файла в массив байт content. Не забудьте освобождать объект потока с помощью using!
using (Stream stream = file.Read()) {
    content = stream.ReadToEnd();
}

Пример. Скопировать файл, затем переместить его на новое место и удалить.

Копирование, перемещение, удаление файла
var content = new byte[]();
// Получаем файл по его локатору.
var fileLocator= new EntityFileLocator("ActivityFile", fileId);
IFile file = UserConnection.GetFile(fileLocator);
// Читаем все содержимое файла в массив байт content. Не забудьте освобождать объект потока с помощью using!
using (Stream stream = file.Read()) {
   content = stream.ReadToEnd();
}
 
// Копирование файла.
 
// Создаем новый IFile для копирования текущего.
Guid copyFileId = Guid.NewGuid();
var copyFileLocator = new EntityFileLocator("ActivityFile", copyFileId);
IFile copyFile = UserConnection.CreateFile(copyFileLocator);
copyFile.Name = file.Name + " - Copy";
copyFile.Save();
 
// Копируем содержимого первого файла в новый файл.
copyFile.Write(new MemoryStream(content), FileWriteOptions.SinglePart);
 
// Альтернативный способ копирования файла.
file.Copy(copyFile);
 
// Перемещение файла.
 
// Создаем новый файл для перемещения текущего.
Guid moveFileId = Guid.NewGuid();
var moveFileLocator = new EntityFileLocator("ContactFile", moveFileId);
IFile moveFile = UserConnection.CreateFile(moveFileLocator);
moveFile.Save();
 
// Перемещаем на новое место.
file.Move(moveFile);
 
// Удаление исходного файла.
file.Delete();