UDK 3.2.7 C/C++ API Reference
|
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 00002 /************************************************************************* 00003 * 00004 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 00005 * 00006 * Copyright 2000, 2010 Oracle and/or its affiliates. 00007 * 00008 * OpenOffice.org - a multi-platform office productivity suite 00009 * 00010 * This file is part of OpenOffice.org. 00011 * 00012 * OpenOffice.org is free software: you can redistribute it and/or modify 00013 * it under the terms of the GNU Lesser General Public License version 3 00014 * only, as published by the Free Software Foundation. 00015 * 00016 * OpenOffice.org is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Lesser General Public License version 3 for more details 00020 * (a copy is included in the LICENSE file that accompanied this code). 00021 * 00022 * You should have received a copy of the GNU Lesser General Public License 00023 * version 3 along with OpenOffice.org. If not, see 00024 * <http://www.openoffice.org/license.html> 00025 * for a copy of the LGPLv3 License. 00026 * 00027 ************************************************************************/ 00028 00029 #ifndef _OSL_FILE_HXX_ 00030 #define _OSL_FILE_HXX_ 00031 00032 #include "sal/config.h" 00033 00034 #include <cassert> 00035 00036 #include <osl/time.h> 00037 #include <rtl/memory.h> 00038 #include <rtl/ustring.hxx> 00039 00040 #include <osl/file.h> 00041 #include <rtl/byteseq.hxx> 00042 00043 #include <stdio.h> 00044 00045 namespace osl 00046 { 00047 00048 00049 // ----------------------------------------------------------------------------- 00057 class FileBase 00058 { 00059 public: 00060 00061 enum RC { 00062 E_None = osl_File_E_None, 00063 E_PERM = osl_File_E_PERM, 00064 E_NOENT = osl_File_E_NOENT, 00065 E_SRCH = osl_File_E_SRCH, 00066 E_INTR = osl_File_E_INTR, 00067 E_IO = osl_File_E_IO, 00068 E_NXIO = osl_File_E_NXIO, 00069 E_2BIG = osl_File_E_2BIG, 00070 E_NOEXEC = osl_File_E_NOEXEC, 00071 E_BADF = osl_File_E_BADF, 00072 E_CHILD = osl_File_E_CHILD, 00073 E_AGAIN = osl_File_E_AGAIN, 00074 E_NOMEM = osl_File_E_NOMEM, 00075 E_ACCES = osl_File_E_ACCES, 00076 E_FAULT = osl_File_E_FAULT, 00077 E_BUSY = osl_File_E_BUSY, 00078 E_EXIST = osl_File_E_EXIST, 00079 E_XDEV = osl_File_E_XDEV, 00080 E_NODEV = osl_File_E_NODEV, 00081 E_NOTDIR = osl_File_E_NOTDIR, 00082 E_ISDIR = osl_File_E_ISDIR, 00083 E_INVAL = osl_File_E_INVAL, 00084 E_NFILE = osl_File_E_NFILE, 00085 E_MFILE = osl_File_E_MFILE, 00086 E_NOTTY = osl_File_E_NOTTY, 00087 E_FBIG = osl_File_E_FBIG, 00088 E_NOSPC = osl_File_E_NOSPC, 00089 E_SPIPE = osl_File_E_SPIPE, 00090 E_ROFS = osl_File_E_ROFS, 00091 E_MLINK = osl_File_E_MLINK, 00092 E_PIPE = osl_File_E_PIPE, 00093 E_DOM = osl_File_E_DOM, 00094 E_RANGE = osl_File_E_RANGE, 00095 E_DEADLK = osl_File_E_DEADLK, 00096 E_NAMETOOLONG = osl_File_E_NAMETOOLONG, 00097 E_NOLCK = osl_File_E_NOLCK, 00098 E_NOSYS = osl_File_E_NOSYS, 00099 E_NOTEMPTY = osl_File_E_NOTEMPTY, 00100 E_LOOP = osl_File_E_LOOP, 00101 E_ILSEQ = osl_File_E_ILSEQ, 00102 E_NOLINK = osl_File_E_NOLINK, 00103 E_MULTIHOP = osl_File_E_MULTIHOP, 00104 E_USERS = osl_File_E_USERS, 00105 E_OVERFLOW = osl_File_E_OVERFLOW, 00106 E_NOTREADY = osl_File_E_NOTREADY, 00107 E_invalidError = osl_File_E_invalidError, /* unmapped error: always last entry in enum! */ 00108 E_TIMEDOUT = osl_File_E_TIMEDOUT, 00109 E_NETWORK = osl_File_E_NETWORK 00110 }; 00111 00112 00113 public: 00114 00136 static inline RC getCanonicalName( const ::rtl::OUString& ustrRequestedURL, ::rtl::OUString& ustrValidURL ) 00137 { 00138 return (RC) osl_getCanonicalName( ustrRequestedURL.pData, &ustrValidURL.pData ); 00139 } 00140 00176 static inline RC getAbsoluteFileURL( const ::rtl::OUString& ustrBaseDirectoryURL, const ::rtl::OUString& ustrRelativeFileURL, ::rtl::OUString& ustrAbsoluteFileURL ) 00177 { 00178 return (RC) osl_getAbsoluteFileURL( ustrBaseDirectoryURL.pData, ustrRelativeFileURL.pData, &ustrAbsoluteFileURL.pData ); 00179 } 00180 00196 static inline RC getSystemPathFromFileURL( const ::rtl::OUString& ustrFileURL, ::rtl::OUString& ustrSystemPath ) 00197 { 00198 return (RC) osl_getSystemPathFromFileURL( ustrFileURL.pData, &ustrSystemPath.pData ); 00199 } 00200 00216 static inline RC getFileURLFromSystemPath( const ::rtl::OUString& ustrSystemPath, ::rtl::OUString& ustrFileURL ) 00217 { 00218 return (RC) osl_getFileURLFromSystemPath( ustrSystemPath.pData, &ustrFileURL.pData ); 00219 } 00220 00249 static inline RC searchFileURL( const ::rtl::OUString& ustrFileName, const ::rtl::OUString& ustrSearchPath, ::rtl::OUString& ustrFileURL ) 00250 { 00251 return (RC) osl_searchFileURL( ustrFileName.pData, ustrSearchPath.pData, &ustrFileURL.pData ); 00252 } 00253 00264 static inline RC getTempDirURL( ::rtl::OUString& ustrTempDirURL ) 00265 { 00266 return (RC) osl_getTempDirURL( &ustrTempDirURL.pData ); 00267 } 00268 00318 static inline RC createTempFile( 00319 ::rtl::OUString* pustrDirectoryURL, 00320 oslFileHandle* pHandle, 00321 ::rtl::OUString* pustrTempFileURL) 00322 { 00323 rtl_uString* pustr_dir_url = pustrDirectoryURL ? pustrDirectoryURL->pData : 0; 00324 rtl_uString** ppustr_tmp_file_url = pustrTempFileURL ? &pustrTempFileURL->pData : 0; 00325 00326 return (RC) osl_createTempFile(pustr_dir_url, pHandle, ppustr_tmp_file_url); 00327 } 00328 }; 00329 00330 00331 // ----------------------------------------------------------------------------- 00337 class VolumeDevice : public FileBase 00338 { 00339 oslVolumeDeviceHandle _aHandle; 00340 00341 public: 00342 00346 VolumeDevice() : _aHandle( NULL ) 00347 { 00348 } 00349 00356 VolumeDevice( const VolumeDevice & rDevice ) 00357 { 00358 _aHandle = rDevice._aHandle; 00359 if ( _aHandle ) 00360 osl_acquireVolumeDeviceHandle( _aHandle ); 00361 } 00362 00366 ~VolumeDevice() 00367 { 00368 if ( _aHandle ) 00369 osl_releaseVolumeDeviceHandle( _aHandle ); 00370 } 00371 00378 inline VolumeDevice & operator =( const VolumeDevice & rDevice ) 00379 { 00380 oslVolumeDeviceHandle newHandle = rDevice._aHandle; 00381 00382 if ( newHandle ) 00383 osl_acquireVolumeDeviceHandle( newHandle ); 00384 00385 if ( _aHandle ) 00386 osl_releaseVolumeDeviceHandle( _aHandle ); 00387 00388 _aHandle = newHandle; 00389 00390 return *this; 00391 } 00392 00398 inline rtl::OUString getMountPath() 00399 { 00400 rtl::OUString aPath; 00401 osl_getVolumeDeviceMountPath( _aHandle, &aPath.pData ); 00402 return aPath; 00403 } 00404 00405 friend class VolumeInfo; 00406 }; 00407 00408 // ----------------------------------------------------------------------------- 00409 00410 class Directory; 00411 00420 class VolumeInfo 00421 { 00422 oslVolumeInfo _aInfo; 00423 sal_uInt32 _nMask; 00424 VolumeDevice _aDevice; 00425 00429 VolumeInfo( VolumeInfo& ); 00430 00434 VolumeInfo& operator = ( VolumeInfo& ); 00435 00436 public: 00437 00444 VolumeInfo( sal_uInt32 nMask ): _nMask( nMask ) 00445 { 00446 _aInfo.uStructSize = sizeof( oslVolumeInfo ); 00447 rtl_fillMemory( &_aInfo.uValidFields, sizeof( oslVolumeInfo ) - sizeof( sal_uInt32 ), 0 ); 00448 _aInfo.pDeviceHandle = &_aDevice._aHandle; 00449 } 00450 00454 ~VolumeInfo() 00455 { 00456 if( _aInfo.ustrFileSystemName ) 00457 rtl_uString_release( _aInfo.ustrFileSystemName ); 00458 } 00459 00468 inline sal_Bool isValid( sal_uInt32 nMask ) const 00469 { 00470 return ( nMask & _aInfo.uValidFields ) == nMask; 00471 } 00472 00479 inline sal_Bool getRemoteFlag() const 00480 { 00481 return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_Remote); 00482 } 00483 00490 inline sal_Bool getRemoveableFlag() const 00491 { 00492 return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_Removeable); 00493 } 00494 00501 inline sal_Bool getCompactDiscFlag() const 00502 { 00503 return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_CompactDisc); 00504 } 00505 00512 inline sal_Bool getFloppyDiskFlag() const 00513 { 00514 return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_FloppyDisk); 00515 } 00516 00523 inline sal_Bool getFixedDiskFlag() const 00524 { 00525 return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_FixedDisk); 00526 } 00527 00534 inline sal_Bool getRAMDiskFlag() const 00535 { 00536 return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_RAMDisk); 00537 } 00538 00546 inline sal_uInt64 getTotalSpace() const 00547 { 00548 return _aInfo.uTotalSpace; 00549 } 00550 00558 inline sal_uInt64 getFreeSpace() const 00559 { 00560 return _aInfo.uFreeSpace; 00561 } 00562 00570 inline sal_uInt64 getUsedSpace() const 00571 { 00572 return _aInfo.uUsedSpace; 00573 } 00574 00582 inline sal_uInt32 getMaxNameLength() const 00583 { 00584 return _aInfo.uMaxNameLength; 00585 } 00586 00594 inline sal_uInt32 getMaxPathLength() const 00595 { 00596 return _aInfo.uMaxPathLength; 00597 } 00598 00606 inline ::rtl::OUString getFileSystemName() const 00607 { 00608 return _aInfo.ustrFileSystemName ? ::rtl::OUString( _aInfo.ustrFileSystemName ) : ::rtl::OUString(); 00609 } 00610 00611 00619 inline VolumeDevice getDeviceHandle() const 00620 { 00621 return _aDevice; 00622 } 00623 00630 bool isCaseSensitiveFileSystem() const 00631 { 00632 return (_aInfo.uAttributes & osl_Volume_Attribute_Case_Sensitive); 00633 } 00634 00642 bool isCasePreservingFileSystem() const 00643 { 00644 return (_aInfo.uAttributes & osl_Volume_Attribute_Case_Is_Preserved); 00645 } 00646 00647 friend class Directory; 00648 }; 00649 00650 // ----------------------------------------------------------------------------- 00651 class DirectoryItem; 00652 00658 class FileStatus 00659 { 00660 oslFileStatus _aStatus; 00661 sal_uInt32 _nMask; 00662 00666 FileStatus( FileStatus& ); 00667 00671 FileStatus& operator = ( FileStatus& ); 00672 00673 public: 00674 00675 enum Type { 00676 Directory = osl_File_Type_Directory, 00677 Volume = osl_File_Type_Volume, 00678 Regular = osl_File_Type_Regular, 00679 Fifo = osl_File_Type_Fifo, 00680 Socket = osl_File_Type_Socket, 00681 Link = osl_File_Type_Link, 00682 Special = osl_File_Type_Special, 00683 Unknown = osl_File_Type_Unknown 00684 }; 00685 00692 FileStatus( sal_uInt32 nMask ): _nMask( nMask ) 00693 { 00694 _aStatus.uStructSize = sizeof( oslFileStatus ); 00695 rtl_fillMemory( &_aStatus.uValidFields, sizeof( oslFileStatus ) - sizeof( sal_uInt32 ), 0 ); 00696 } 00697 00701 ~FileStatus() 00702 { 00703 if ( _aStatus.ustrFileURL ) 00704 rtl_uString_release( _aStatus.ustrFileURL ); 00705 if ( _aStatus.ustrLinkTargetURL ) 00706 rtl_uString_release( _aStatus.ustrLinkTargetURL ); 00707 if ( _aStatus.ustrFileName ) 00708 rtl_uString_release( _aStatus.ustrFileName ); 00709 } 00710 00720 inline sal_Bool isValid( sal_uInt32 nMask ) const 00721 { 00722 return ( nMask & _aStatus.uValidFields ) == nMask; 00723 } 00724 00730 inline Type getFileType() const 00731 { 00732 SAL_INFO_IF( 00733 !isValid(osl_FileStatus_Mask_Type), "sal", 00734 "no FileStatus Type determined"); 00735 return isValid(osl_FileStatus_Mask_Type) 00736 ? static_cast< Type >(_aStatus.eType) : Unknown; 00737 } 00738 00748 inline sal_Bool isDirectory() const 00749 { 00750 return ( getFileType() == Directory || getFileType() == Volume ); 00751 } 00752 00763 inline sal_Bool isRegular() const 00764 { 00765 return ( getFileType() == Regular ); 00766 } 00767 00776 inline sal_Bool isLink() const 00777 { 00778 return ( getFileType() == Link ); 00779 } 00780 00787 inline sal_uInt64 getAttributes() const 00788 { 00789 SAL_INFO_IF( 00790 !isValid(osl_FileStatus_Mask_Attributes), "sal", 00791 "no FileStatus Attributes determined"); 00792 return _aStatus.uAttributes; 00793 } 00794 00802 inline TimeValue getCreationTime() const 00803 { 00804 SAL_INFO_IF( 00805 !isValid(osl_FileStatus_Mask_CreationTime), "sal", 00806 "no FileStatus CreationTime determined"); 00807 return _aStatus.aCreationTime; 00808 } 00809 00817 inline TimeValue getAccessTime() const 00818 { 00819 SAL_INFO_IF( 00820 !isValid(osl_FileStatus_Mask_AccessTime), "sal", 00821 "no FileStatus AccessTime determined"); 00822 return _aStatus.aAccessTime; 00823 } 00824 00832 inline TimeValue getModifyTime() const 00833 { 00834 SAL_INFO_IF( 00835 !isValid(osl_FileStatus_Mask_ModifyTime), "sal", 00836 "no FileStatus ModifyTime determined"); 00837 return _aStatus.aModifyTime; 00838 } 00839 00846 inline sal_uInt64 getFileSize() const 00847 { 00848 SAL_INFO_IF( 00849 !isValid(osl_FileStatus_Mask_FileSize), "sal", 00850 "no FileStatus FileSize determined"); 00851 return _aStatus.uFileSize; 00852 } 00853 00860 inline ::rtl::OUString getFileName() const 00861 { 00862 SAL_INFO_IF( 00863 !isValid(osl_FileStatus_Mask_FileName), "sal", 00864 "no FileStatus FileName determined"); 00865 return isValid(osl_FileStatus_Mask_FileName) 00866 ? rtl::OUString(_aStatus.ustrFileName) : rtl::OUString(); 00867 } 00868 00869 00877 inline ::rtl::OUString getFileURL() const 00878 { 00879 SAL_INFO_IF( 00880 !isValid(osl_FileStatus_Mask_FileURL), "sal", 00881 "no FileStatus FileURL determined"); 00882 return isValid(osl_FileStatus_Mask_FileURL) 00883 ? rtl::OUString(_aStatus.ustrFileURL) : rtl::OUString(); 00884 } 00885 00893 inline ::rtl::OUString getLinkTargetURL() const 00894 { 00895 SAL_INFO_IF( 00896 !isValid(osl_FileStatus_Mask_LinkTargetURL), "sal", 00897 "no FileStatus LinkTargetURL determined"); 00898 return isValid(osl_FileStatus_Mask_LinkTargetURL) 00899 ? rtl::OUString(_aStatus.ustrLinkTargetURL) : rtl::OUString(); 00900 } 00901 00902 friend class DirectoryItem; 00903 }; 00904 00905 00906 // ----------------------------------------------------------------------------- 00913 class File: public FileBase 00914 { 00915 oslFileHandle _pData; 00916 ::rtl::OUString _aPath; 00917 00921 File( File& ); 00922 00926 File& operator = ( File& ); 00927 00928 public: 00929 00936 File( const ::rtl::OUString& ustrFileURL ): _pData( 0 ), _aPath( ustrFileURL ) {} 00937 00941 inline ~File() 00942 { 00943 close(); 00944 } 00945 00989 inline RC open( sal_uInt32 uFlags ) 00990 { 00991 return (RC) osl_openFile( _aPath.pData, &_pData, uFlags ); 00992 } 00993 01008 inline RC close() 01009 { 01010 oslFileError Error = osl_File_E_BADF; 01011 01012 if( _pData ) 01013 { 01014 Error=osl_closeFile( _pData ); 01015 _pData = NULL; 01016 } 01017 01018 return (RC) Error; 01019 } 01020 01038 inline RC setPos( sal_uInt32 uHow, sal_Int64 uPos ) SAL_WARN_UNUSED_RESULT 01039 { 01040 return (RC) osl_setFilePos( _pData, uHow, uPos ); 01041 } 01042 01059 inline RC getPos( sal_uInt64& uPos ) 01060 { 01061 return (RC) osl_getFilePos( _pData, &uPos ); 01062 } 01063 01086 inline RC isEndOfFile( sal_Bool *pIsEOF ) 01087 { 01088 return (RC) osl_isEndOfFile( _pData, pIsEOF ); 01089 } 01090 01109 inline RC setSize( sal_uInt64 uSize ) 01110 { 01111 return (RC) osl_setFileSize( _pData, uSize ); 01112 } 01113 01134 inline RC getSize( sal_uInt64 &rSize ) 01135 { 01136 return (RC) osl_getFileSize( _pData, &rSize ); 01137 } 01138 01171 inline RC read( void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64& rBytesRead ) 01172 { 01173 return (RC) osl_readFile( _pData, pBuffer, uBytesRequested, &rBytesRead ); 01174 } 01175 01210 inline RC write(const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64& rBytesWritten) 01211 { 01212 return (RC) osl_writeFile( _pData, pBuffer, uBytesToWrite, &rBytesWritten ); 01213 } 01214 01215 01240 inline RC readLine( ::rtl::ByteSequence& aSeq ) 01241 { 01242 return (RC) osl_readLine( _pData, reinterpret_cast<sal_Sequence**>(&aSeq) ); 01243 } 01244 01276 inline RC sync() const 01277 { 01278 OSL_PRECOND(_pData, "File::sync(): File not open"); 01279 return (RC)osl_syncFile(_pData); 01280 } 01281 01308 inline static RC copy( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL ) 01309 { 01310 return (RC) osl_copyFile( ustrSourceFileURL.pData, ustrDestFileURL.pData ); 01311 } 01312 01337 inline static RC move( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL ) 01338 { 01339 return (RC) osl_moveFile( ustrSourceFileURL.pData, ustrDestFileURL.pData ); 01340 } 01341 01370 inline static RC remove( const ::rtl::OUString& ustrFileURL ) 01371 { 01372 return (RC) osl_removeFile( ustrFileURL.pData ); 01373 } 01374 01390 inline static RC setAttributes( const ::rtl::OUString& ustrFileURL, sal_uInt64 uAttributes ) 01391 { 01392 return (RC) osl_setFileAttributes( ustrFileURL.pData, uAttributes ); 01393 } 01394 01417 inline static RC setTime( 01418 const ::rtl::OUString& ustrFileURL, 01419 const TimeValue& rCreationTime, 01420 const TimeValue& rLastAccessTime, 01421 const TimeValue& rLastWriteTime ) 01422 { 01423 return (RC) osl_setFileTime( 01424 ustrFileURL.pData, 01425 &rCreationTime, 01426 &rLastAccessTime, 01427 &rLastWriteTime ); 01428 } 01429 01430 friend class DirectoryItem; 01431 }; 01432 01433 // ----------------------------------------------------------------------------- 01439 class DirectoryItem: public FileBase 01440 { 01441 oslDirectoryItem _pData; 01442 01443 public: 01444 01448 DirectoryItem(): _pData( NULL ) 01449 { 01450 } 01451 01455 DirectoryItem( const DirectoryItem& rItem ): _pData( rItem._pData) 01456 { 01457 if( _pData ) 01458 osl_acquireDirectoryItem( _pData ); 01459 } 01460 01464 ~DirectoryItem() 01465 { 01466 if( _pData ) 01467 osl_releaseDirectoryItem( _pData ); 01468 } 01469 01473 DirectoryItem& operator=(const DirectoryItem& rItem ) 01474 { 01475 if (&rItem != this) 01476 { 01477 if( _pData ) 01478 osl_releaseDirectoryItem( _pData ); 01479 01480 _pData = rItem._pData; 01481 01482 if( _pData ) 01483 osl_acquireDirectoryItem( _pData ); 01484 } 01485 return *this; 01486 } 01487 01494 inline sal_Bool is() 01495 { 01496 return _pData != NULL; 01497 } 01498 01533 static inline RC get( const ::rtl::OUString& ustrFileURL, DirectoryItem& rItem ) 01534 { 01535 if( rItem._pData) 01536 { 01537 osl_releaseDirectoryItem( rItem._pData ); 01538 rItem._pData = NULL; 01539 } 01540 01541 return (RC) osl_getDirectoryItem( ustrFileURL.pData, &rItem._pData ); 01542 } 01543 01576 inline RC getFileStatus( FileStatus& rStatus ) 01577 { 01578 return (RC) osl_getFileStatus( _pData, &rStatus._aStatus, rStatus._nMask ); 01579 } 01580 01597 inline sal_Bool isIdenticalTo( const DirectoryItem &pOther ) 01598 { 01599 return osl_identicalDirectoryItem( _pData, pOther._pData ); 01600 } 01601 01602 friend class Directory; 01603 }; 01604 01605 //########################################### 01606 01617 class DirectoryCreationObserver 01618 { 01619 public: 01620 virtual ~DirectoryCreationObserver() {} 01621 01631 virtual void DirectoryCreated(const rtl::OUString& aDirectoryUrl) = 0; 01632 }; 01633 01634 //########################################### 01635 // This just an internal helper function for 01636 // private use. 01637 extern "C" inline void SAL_CALL onDirectoryCreated(void* pData, rtl_uString* aDirectoryUrl) 01638 { 01639 (static_cast<DirectoryCreationObserver*>(pData))->DirectoryCreated(aDirectoryUrl); 01640 } 01641 01648 class Directory: public FileBase 01649 { 01650 oslDirectory _pData; 01651 ::rtl::OUString _aPath; 01652 01656 Directory( Directory& ); 01657 01661 Directory& operator = ( Directory& ); 01662 01663 public: 01664 01672 Directory( const ::rtl::OUString& strPath ): _pData( 0 ), _aPath( strPath ) 01673 { 01674 } 01675 01679 ~Directory() 01680 { 01681 close(); 01682 } 01683 01702 inline RC open() 01703 { 01704 return (RC) osl_openDirectory( _aPath.pData, &_pData ); 01705 } 01706 01718 inline sal_Bool isOpen() { return _pData != NULL; } 01719 01732 inline RC close() 01733 { 01734 oslFileError Error = osl_File_E_BADF; 01735 01736 if( _pData ) 01737 { 01738 Error=osl_closeDirectory( _pData ); 01739 _pData = NULL; 01740 } 01741 01742 return (RC) Error; 01743 } 01744 01745 01763 inline RC reset() 01764 { 01765 close(); 01766 return open(); 01767 } 01768 01792 inline RC getNextItem( DirectoryItem& rItem, sal_uInt32 nHint = 0 ) 01793 { 01794 if( rItem._pData ) 01795 { 01796 osl_releaseDirectoryItem( rItem._pData ); 01797 rItem._pData = 0; 01798 } 01799 return ( RC) osl_getNextDirectoryItem( _pData, &rItem._pData, nHint ); 01800 } 01801 01802 01834 inline static RC getVolumeInfo( const ::rtl::OUString& ustrDirectoryURL, VolumeInfo& rInfo ) 01835 { 01836 return (RC) osl_getVolumeInformation( ustrDirectoryURL.pData, &rInfo._aInfo, rInfo._nMask ); 01837 } 01838 01866 inline static RC create( const ::rtl::OUString& ustrDirectoryURL ) 01867 { 01868 return (RC) osl_createDirectory( ustrDirectoryURL.pData ); 01869 } 01870 01899 inline static RC remove( const ::rtl::OUString& ustrDirectoryURL ) 01900 { 01901 return (RC) osl_removeDirectory( ustrDirectoryURL.pData ); 01902 } 01903 01956 static RC createPath( 01957 const ::rtl::OUString& aDirectoryUrl, 01958 DirectoryCreationObserver* aDirectoryCreationObserver = NULL) 01959 { 01960 return (RC)osl_createDirectoryPath( 01961 aDirectoryUrl.pData, 01962 (aDirectoryCreationObserver) ? onDirectoryCreated : NULL, 01963 aDirectoryCreationObserver); 01964 } 01965 }; 01966 01967 } /* namespace osl */ 01968 01969 #endif /* _OSL_FILE_HXX_ */ 01970 01971 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */