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(); КонецПроцедуры