OGRDataSource *OGRCSVDriver::Open( const char * pszFilename, int bUpdate ) { OGRCSVDataSource *poDS = new OGRCSVDataSource(); if( !poDS->Open( pszFilename, bUpdate, FALSE ) ) { delete poDS; poDS = NULL; } return poDS; }
OGRDataSource *OGRCSVDriver::CreateDataSource( const char * pszName, char ** /* papszOptions */ ) { /* -------------------------------------------------------------------- */ /* First, ensure there isn't any such file yet. */ /* -------------------------------------------------------------------- */ VSIStatBuf sStatBuf; if( VSIStat( pszName, &sStatBuf ) == 0 ) { CPLError( CE_Failure, CPLE_AppDefined, "It seems a file system object called '%s' already exists.", pszName ); return NULL; } /* -------------------------------------------------------------------- */ /* Create a directory. */ /* -------------------------------------------------------------------- */ if( VSIMkdir( pszName, 0755 ) != 0 ) { CPLError( CE_Failure, CPLE_AppDefined, "Failed to create directory %s:\n%s", pszName, VSIStrerror( errno ) ); return NULL; } /* -------------------------------------------------------------------- */ /* Force it to open as a datasource. */ /* -------------------------------------------------------------------- */ OGRCSVDataSource *poDS = new OGRCSVDataSource(); if( !poDS->Open( pszName, TRUE, TRUE ) ) { delete poDS; return NULL; } return poDS; }
OGRDataSource *OGRCSVDriver::CreateDataSource( const char * pszName, char **papszOptions ) { /* -------------------------------------------------------------------- */ /* First, ensure there isn't any such file yet. */ /* -------------------------------------------------------------------- */ VSIStatBufL sStatBuf; if (strcmp(pszName, "/dev/stdout") == 0) pszName = "/vsistdout/"; if( VSIStatL( pszName, &sStatBuf ) == 0 ) { CPLError( CE_Failure, CPLE_AppDefined, "It seems a file system object called '%s' already exists.", pszName ); return NULL; } /* -------------------------------------------------------------------- */ /* If the target is not a simple .csv then create it as a */ /* directory. */ /* -------------------------------------------------------------------- */ CPLString osDirName; if( EQUAL(CPLGetExtension(pszName),"csv") ) { osDirName = CPLGetPath(pszName); if( osDirName == "" ) osDirName = "."; } else { if( strncmp(pszName, "/vsizip/", 8) == 0) { /* do nothing */ } else if( !EQUAL(pszName, "/vsistdout/") && VSIMkdir( pszName, 0755 ) != 0 ) { CPLError( CE_Failure, CPLE_AppDefined, "Failed to create directory %s:\n%s", pszName, VSIStrerror( errno ) ); return NULL; } osDirName = pszName; } /* -------------------------------------------------------------------- */ /* Force it to open as a datasource. */ /* -------------------------------------------------------------------- */ OGRCSVDataSource *poDS = new OGRCSVDataSource(); if( !poDS->Open( osDirName, TRUE, TRUE ) ) { delete poDS; return NULL; } if( osDirName != pszName ) poDS->SetDefaultCSVName( CPLGetFilename(pszName) ); return poDS; }