ajaysport Ответов: 1

Как преобразовать поток памяти в файл Sqlite db


Привет,

Я работаю над требованием резервного копирования файлов .sqlite через службы rest, построенные на Webapi.Служба должна принимать файл .sqlite в качестве потока памяти и хранить его в базе данных, а также возвращать файл .sqlite при запросе путем преобразования из потока, хранящегося в базе данных.Я хочу знать, как я могу создать файл sqlite из памяти sream.Пожалуйста, направь меня.

Mehdi Gholam

Что вы уже сделали?

1 Ответов

Рейтинг:
5

OriginalGriff

Если у вас есть содержимое в виде потока памяти, то это просто:

using (FileStream fs = new FileStream(@"D:\Temp\MySqLiteDB.sqlite", FileMode.Create, System.IO.FileAccess.Write)) 
   {
   memoryStream.WriteTo(fs);
   }

Но...скорее всего, вы действительно получаете его из своей БД в виде массива байтов - и это еще проще:
File.WriteAllBytes(@"D:\Temp\MySqLiteDB.sqlite", arrayOfBytes);

И вы уверены, что это хорошая идея-хранить базы данных внутри других баз данных?


bschuber

Можно ли это сделать в памяти, а не создавать физический файл?

OriginalGriff

Вы хотите делать резервные копии в память, а не на энергонезависимый носитель?

Инженер по оборудованию, с которым я работал, описал бы это как "несколько эзотерическое решение, не так ли?"
Он использовал эту фразу, когда клиент просил о чем-то, что разрушило бы всю идею, которую он должен был решить...

bschuber

Вообще-то нет.
1. Абонент превращает базу данных в файловую^
2. Абонент звонит toArray в хранилище FileStream^, уступая байтовый массив.
3. Вызывающий код передает массив байтов сервисная компания на облаке.
4. Услуги компании передает объект ByteArray, чтобы мой объект преобразования.
5. каким-то образом мой объект преобразования должен превратить этот массив байтов обратно в базу данных, не касаясь жесткого диска.
6. мой объект преобразования создает выходной файл, сопоставляет поля из таблиц в базе данных с полями в выходном файле и превращает выходной файл в другой массив байтов.
7. я возвращаю преобразованный byteArray сервису, который возвращает преобразованный массив байтов вызывающему методу.
8. Да, возможно, они могут хранить базу данных в таблице в виде большого двоичного объекта, но я этого не знаю-все, что я знаю, это то, что я получаю массив байтов, который, если я придумаю фальшивое имя и запишу файл на диск, является базой данных sqlite. Но они не хотят, чтобы я делал дисковую часть, потому что она находится в облаке.