Чтение и запись бинарных файлов в 1С при помощи SAPI (Speech API)

База знаний
  1. 11 г. назад
    15.12.2013 13:59:12 отредактировано andrewks

    целевая ОС: Windows

    Процедура Способ1(ИмяФайла,ИмяВыходногоФайла)
        РазмерБуфера = 1048576;
        Буфер = "";
        Остаток = "";
        memoryStream = Новый COMОбъект("SAPI.spMemoryStream");
        fileStream = Новый COMОбъект("SAPI.spFileStream");
        fileStream.Open(ИмяФайла);
        outStream = Новый COMОбъект("SAPI.spFileStream");
        outStream.Format.Type = 1;
        outStream.Open(ИмяВыходногоФайла, 3);
        Пока Истина Цикл 
            ОбработкаПрерыванияПользователя();
            Байтов = fileStream.Read(Буфер, РазмерБуфера);
            Сообщить(ТипЗнч(Буфер));
            Если Байтов < РазмерБуфера Тогда 
                Если Байтов > 0 Тогда 
                    memoryStream.SetData(Буфер);
                    memoryStream.Read(Остаток, Байтов);
    
                    outStream.Write(Остаток);
                КонецЕсли;
                Прервать;
            Иначе
                outStream.Write(Буфер);
            КонецЕсли;
        КонецЦикла;
        fileStream.Close();
        outStream.Close();
    КонецПроцедуры
    
    Процедура Способ2(ИмяФайла,ИмяВыходногоФайла)
        BufferSize=1048576;
        InArray=Новый ComSafeArray("VT_UI1",BufferSize);
        Сообщить("Тип элементов: "+InArray.GetType());
        InStream=Новый COMОбъект("SAPI.spFileStream");
        InStream.Open(ИмяФайла);
        OutStream=Новый COMОбъект("SAPI.spFileStream");
        OutStream.Format.Type=1; // SAFTText
        OutStream.Open(ИмяВыходногоФайла,3);
        // Open(FileName,FileMode)
        // FileMode values:
        // SSFMOpenForRead = 0 - Opens an existing file as read-only
        // SSFMOpenReadWrite = 1 - Opens an existing file as read-write
        // SSFMCreate = 2 - Opens an existing file as read-write. Else, it creates the file then opens it as read-write
        // SSFMCreateForWrite = 3 - Creates file even if file exists and so destroys or overwrites the existing file
        
        // Seek(Position,Origin)
        // Origin values:
        // SSSPTRelativeToStart = 0 - Calculates the stream offset relative from the start of the stream
        // SSSPTRelativeToCurrentPosition = 1 - Calculates the stream offset relative from the current position
        // SSSPTRelativeToEnd = 2 - Calculates the stream offset relative from the end of the stream
        
        Пока Истина Цикл
            ОбработкаПрерыванияПользователя();
            DataSize=InStream.Read(InArray,BufferSize);
            Сообщить("DataSize =  "+DataSize);
            Если DataSize=BufferSize Тогда
                OutStream.Write(InArray);
            Иначе
                Если DataSize>0 Тогда
                    InArray.Resize(DataSize);
                    OutStream.Write(InArray);
                КонецЕсли;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        InStream.Close();
        OutStream.Close();
    КонецПроцедуры
    
    

или зарегистрируйтесь чтобы ответить!