Я работаю с базой данных SQL, которая хранит файлы Excel (наряду с другими типами файлов, такими как PDF) в виде двоичных данных.Я использую следующий код для извлечения этих файлов в файловую систему.
Проблема: PDF-файлы выходят просто отлично.Но для Excel файлы создаются, и когда я пытаюсь открыть их, они вылетают или просто выдают мне мусорный текст.
Я использую этот код от предыдущего парня, который написал это приложение для получения файлов.Этот код использует OpenMcdf, который я не до конца понимаю, потому что я не смог найти для него полезную онлайн-документацию.
//execution starts here
public override void SaveToDisk()
{
byte[] keys = { (byte)0xd0, (byte)0xcf };
//Searches through m_RawOleObject for combination of 'keys'
int offset = Utils.SearchBytes(m_RawOleObject, keys); //returns '60' in case of Excel and '66' in case of Pdf
//m_RawOleOjbect contains the data from the sqlDataReader (the binary data from the column.)
m_RawOleObject = strip(m_RawOleObject, offset);
MemoryStream ms = new MemoryStream(m_RawOleObject);
CompoundFile cf = new CompoundFile(ms);
GetStorageByName(cf.RootStorage, m_StorageName);
if (Storage != null)
{
if (Storage is CFStream)
{
m_RawOleObject = (Storage as CFStream).GetData();
}
m_filename = System.IO.Path.Combine(STOREPATH, Utils.CombineFilenameWithExtension(Filename, m_extension));
WriteToFile(m_filename, m_RawOleObject);
}
}
protected void WriteToFile(string fn, byte[] obj)
{
fn = GetNextAvailableFilename(fn, 0);
FileStream fs = new FileStream(fn, FileMode.Create);
BinaryWriter writer = new BinaryWriter(fs);
writer.Write(obj);
writer.Close();
fs.Close();
fs.Dispose();
}
protected void GetStorageByName(CFStorage cfs, string name)
{
VisitedEntryAction va = delegate(CFItem target)
{
if (target is CFStorage)
{
GetStorageByName((CFStorage)target, name);
}
else
{
if (target.Name == name)
Storage = target;
}
};
//Visit NON-recursively (first level only)
cfs.VisitEntries(va, false);
}
Есть идеи, что здесь происходит?почему Excel поврежден?Я не могу найти много онлайн, несмотря на часы поиска!
любые идеи, предложения или решения будут оценены.
Спасибо