UDK 3.2.7 C/C++ API Reference
osl/file.hxx
Go to the documentation of this file.
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: */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines