0
echo77
24.09.13
✎
12:31
|
В общем, получаю данные запросом с MSSQL сервера(картинки)
И в цикле записываю их в файлы вот такой процедурой:
Процедура БиоСКУД_СохранитьКартинку(BinaryData, ИмяФайла)
// Определим начало заголовка FF,D8,FF,E0 JPEG
Массив = BinaryData.Unload();
Смещение = 8;
Для н=0 По Массив.ВГраница()-4 Цикл
Если Массив[н] = 255 // 0xFF
И Массив[н+1] = 216 // 0xD8
И Массив[н+2] = 255 // 0xFF
И Массив[н+3] = 224 // 0xE0
Тогда
Смещение = н;
Прервать;
КонецЕсли;
КонецЦикла;
StreamTypeEnum = Новый Структура("adTypeBinary, adTypeText", 1, 2);
SaveOptionsEnum = Новый Структура("adSaveCreateNotExist, adSaveCreateOverWrite", 1, 2);
ConnectModeEnum = Новый Структура(
"adModeRead, adModeReadWrite, adModeRecursive, adModeShareDenyNone,
|adModeShareDenyRead, adModeShareDenyWrite, adModeShareExclusive,
|adModeUnknown, adModeWrite", 1, 3, 4194304, 16, 4, 8, 12, 0, 2);
Stream = Новый COMОбъект("ADODB.Stream");
NewStream = Новый COMОбъект("ADODB.Stream");
NewStream.Type = StreamTypeEnum.adTypeBinary;
NewStream.Mode = ConnectModeEnum.adModeReadWrite;
NewStream.Open();
Stream.Type = StreamTypeEnum.adTypeBinary;
Stream.Mode = ConnectModeEnum.adModeReadWrite;
Stream.Open();
Stream.Write(BinaryData);
Stream.Position = Смещение;
Stream.CopyTo(NewStream, Stream.Size - Смещение);
NewStream.SaveToFile(ИмяФайла, SaveOptionsEnum.adSaveCreateOverWrite);
Stream.Close();
NewStream.Close();
КонецПроцедуры
в результате, все файлы размером более 1 кластера получаются фрагментированными. Как этого избежать?
|
|