Рейтинг:
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. Но они не хотят, чтобы я делал дисковую часть, потому что она находится в облаке.