diff options
Diffstat (limited to 'filter/source/xsltdialog/xmlfilterjar.cxx')
-rw-r--r-- | filter/source/xsltdialog/xmlfilterjar.cxx | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/filter/source/xsltdialog/xmlfilterjar.cxx b/filter/source/xsltdialog/xmlfilterjar.cxx index dc22a7ddbee8..2c87250317e7 100644 --- a/filter/source/xsltdialog/xmlfilterjar.cxx +++ b/filter/source/xsltdialog/xmlfilterjar.cxx @@ -390,8 +390,20 @@ bool XMLFilterJarHelper::copyFile( Reference< XHierarchicalNameAccess > xIfc, OU if( !createDirectory( rURL ) ) return false; - SvFileStream aOutputStream(rURL, STREAM_WRITE ); - Reference< XOutputStream > xOS( new utl::OOutputStreamWrapper( aOutputStream ) ); + ::osl::File file(rURL); + ::osl::FileBase::RC rc = + file.open(osl_File_OpenFlag_Write|osl_File_OpenFlag_Create); + if (::osl::FileBase::E_EXIST == rc) { + rc = file.open(osl_File_OpenFlag_Write); + if (::osl::FileBase::E_None == rc) { + file.setSize(0); // #i97170# truncate + } + } + if (::osl::FileBase::E_None != rc) { + throw RuntimeException(); + } + Reference< XOutputStream > const xOS( + new comphelper::OSLOutputStreamWrapper(file)); return copyStreams( xIS, xOS ); } |