Чтение и запись бинарных файлов в 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();
    КонецПроцедуры
    
    

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