VCOM:Enumerating folder contents
.SDK|SDK ..SDK:Types|SDK Types ..VCOM:VCOM (Vectorworks Component Object Model)|VCOM Basics ..VCOM:Class Reference|VCOM Class Reference
Enumerating Folder Contents
Having valid VCOM:VectorWorks:Filing:IFolderIdentifier (see VCOM:Working with File Identifiers) will allow you to use IFolderIdentifier::EnumerateContents function to enumerate that folder contents.
Create Folder Listener Class
Before enumerating you have to create a class that will receive the folder contents. This you do by creating class implementing IFolderContentListener interface. (see remarks of IFolderIdentifier::EnumerateContents)
class CMyFolderListener : public IFolderContentListener { public: CMyFolderListener(int someData) { fSomeData = someData; } void GetFiles(TXStringArray& outArrFiles) { outArrFiles = farrFiles; } // IFolderContentListener public: virtual EFolderContentListenerResult VCOM_CALLTYPE OnFolderContent(IFolderIdentifier* pFolderID) { TXString folderName; pFolderID->GetName( folderName ); return eFolderContentListenerResult_Continue; } virtual EFolderContentListenerResult VCOM_CALLTYPE OnFileContent(IFileIdentifier* pFileID) { TXString fileName; pFileID->GetFileName( fileName); farrFiles.Append( fileName ); return eFolderContentListenerResult_Continue; } protected: int fSomeData; TXStringArray farrFiles; };
This class extends IFolderContentListener which makes it folder listener. It is responsible for handing folder contents through virtual functions 'OnFolderContent' and 'OnFileContent'.
Also it can store local data that is received by the constructor and retreived by public member function.
Enumerate
When you want to enumerate, you create an instance of your listener class and call IFolderIdentifier::EnumerateContents of the VCOM:VectorWorks:Filing:IFolderIdentifier instance representing the folder you want to enumerate:
IFolderIdentifierPtr pFolderID( IID_FolderIdentifier ); if ( VCOM_SUCCEEDED( pFolderID->Set( kExternalsFolder, false, "MyFolder" ) ) ) { CMyFolderListener myContentsListener( 32 ); pFolderID->EnumerateContents( & myContentsListener, false ); TXStringArray arrFiles; myContentsListener.GetFiles( arrFiles ); // ... }