Используя MemoryStream, чтобы сохранить .docx файл C#

Я испытываю некоторые затруднения для загрузки файла из памяти Поток к базе данных (это видимо в DB как 0x, таким образом, я предполагаю, что это не становится сохраненным правильно). Я не уверен, является ли это проблемой с создаваемым Потоком, или сохраните к дб от потока, должен быть сделан по-другому.

private void test {
        byte[] storage = new byte[500000];
        using (MemoryStream stream = new MemoryStream(storage))
        DocX documentWord = DocX.Create(stream);
        // some stuff
        documentWord.Save(); 
        databaseFilePut(stream);
}


public static void databaseFilePut(MemoryStream stream) {
        byte[] file;
        using (var reader = new BinaryReader(stream)) {
                file = reader.ReadBytes((int) stream.Length);
               // reader.Close();
        }
            //stream.Close();
        //}
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP))
        using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) {
            sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
            sqlWrite.ExecuteNonQuery();
        }
    }

Что я делаю неправильно? Я пользуюсь библиотекой Docx codeplex.

7
задан MadBoy 3 March 2010 в 10:14
поделиться

1 ответ

Вы пишете в поток, а затем сразу пытаетесь читать из него без перемотки ... так что нет данных для чтения.

К счастью, в любом случае есть очень простой способ упростить код:

byte[] file = stream.ToArray();

Однако у вас есть еще одна потенциальная проблема:

byte[] storage = new byte[500000];
using (MemoryStream stream = new MemoryStream(storage))
...

Это заставит MemoryStream исправить размером 500К - ни больше, ни меньше. Я подозреваю, что это не то, что вам нужно; Я предлагаю вам избавиться от переменной хранилища и просто вызвать конструктор MemoryStream без параметров.

7
ответ дан 7 December 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: