本文整理汇总了C++中VSIFOpenL函数的典型用法代码示例。如果您正苦于以下问题:C++ VSIFOpenL函数的具体用法?C++ VSIFOpenL怎么用?C++ VSIFOpenL使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了VSIFOpenL函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: EnvisatFile_Create
int EnvisatFile_Create( EnvisatFile **self_ptr,
const char *filename,
const char *template_file )
{
int template_size;
char *template_data;
VSILFILE *fp;
/*
* Try to open the template file, and read it into memory.
*/
fp = VSIFOpenL( template_file, "rb" );
if( fp == NULL )
{
char error_buf[2048];
sprintf( error_buf,
"Unable to open file \"%s\" in EnvisatFile_Create().",
template_file );
SendError( error_buf );
return FAILURE;
}
VSIFSeekL( fp, 0, SEEK_END );
template_size = (int) VSIFTellL( fp );
template_data = (char *) malloc(template_size);
VSIFSeekL( fp, 0, SEEK_SET );
VSIFReadL( template_data, template_size, 1, fp );
VSIFCloseL( fp );
/*
* Try to write the template out to the new filename.
*/
fp = VSIFOpenL( filename, "wb" );
if( fp == NULL )
{
char error_buf[2048];
sprintf( error_buf,
"Unable to open file \"%s\" in EnvisatFile_Create().",
filename );
SendError( error_buf );
return FAILURE;
}
VSIFWriteL( template_data, template_size, 1, fp );
VSIFCloseL( fp );
free( template_data );
/*
* Now just open the file normally.
*/
return EnvisatFile_Open( self_ptr, filename, "r+" );
}
示例2: CSLFetchNameValue
GDALDataset *PAuxDataset::Create( const char * pszFilename,
int nXSize, int nYSize, int nBands,
GDALDataType eType,
char **papszOptions )
{
const char *pszInterleave = CSLFetchNameValue( papszOptions, "INTERLEAVE" );
if( pszInterleave == NULL )
pszInterleave = "BAND";
/* -------------------------------------------------------------------- */
/* Verify input options. */
/* -------------------------------------------------------------------- */
if( eType != GDT_Byte && eType != GDT_Float32 && eType != GDT_UInt16
&& eType != GDT_Int16 )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Attempt to create PCI .Aux labelled dataset with an illegal\n"
"data type (%s).\n",
GDALGetDataTypeName(eType) );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Sum the sizes of the band pixel types. */
/* -------------------------------------------------------------------- */
int nPixelSizeSum = 0;
for( int iBand = 0; iBand < nBands; iBand++ )
nPixelSizeSum += GDALGetDataTypeSizeBytes(eType);
/* -------------------------------------------------------------------- */
/* Try to create the file. */
/* -------------------------------------------------------------------- */
VSILFILE *fp = VSIFOpenL( pszFilename, "w" );
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Attempt to create file `%s' failed.\n",
pszFilename );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Just write out a couple of bytes to establish the binary */
/* file, and then close it. */
/* -------------------------------------------------------------------- */
CPL_IGNORE_RET_VAL(VSIFWriteL( "\0\0", 2, 1, fp ));
CPL_IGNORE_RET_VAL(VSIFCloseL( fp ));
/* -------------------------------------------------------------------- */
/* Create the aux filename. */
/* -------------------------------------------------------------------- */
char *pszAuxFilename = static_cast<char *>(
CPLMalloc( strlen( pszFilename ) + 5 ) );
strcpy( pszAuxFilename, pszFilename );;
for( int i = static_cast<int>(strlen(pszAuxFilename))-1; i > 0; i-- )
{
if( pszAuxFilename[i] == '.' )
{
pszAuxFilename[i] = '\0';
break;
}
}
strcat( pszAuxFilename, ".aux" );
/* -------------------------------------------------------------------- */
/* Open the file. */
/* -------------------------------------------------------------------- */
fp = VSIFOpenL( pszAuxFilename, "wt" );
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Attempt to create file `%s' failed.\n",
pszAuxFilename );
return NULL;
}
CPLFree( pszAuxFilename );
/* -------------------------------------------------------------------- */
/* We need to write out the original filename but without any */
/* path components in the AuxilaryTarget line. Do so now. */
/* -------------------------------------------------------------------- */
int iStart = static_cast<int>(strlen(pszFilename))-1;
while( iStart > 0 && pszFilename[iStart-1] != '/'
&& pszFilename[iStart-1] != '\\' )
iStart--;
CPL_IGNORE_RET_VAL(VSIFPrintfL( fp, "AuxilaryTarget: %s\n", pszFilename + iStart ));
/* -------------------------------------------------------------------- */
/* Write out the raw definition for the dataset as a whole. */
/* -------------------------------------------------------------------- */
CPL_IGNORE_RET_VAL(VSIFPrintfL( fp, "RawDefinition: %d %d %d\n",
nXSize, nYSize, nBands ));
/* -------------------------------------------------------------------- */
//.........这里部分代码省略.........
示例3: CPLError
//.........这里部分代码省略.........
nExtentUnits = 0;
}
else
{
double dfLinear = oSRS.GetLinearUnits();
if( ABS(dfLinear - 0.3048) < 0.0000001 )
nExtentUnits = 2;
else if( ABS(dfLinear - CPLAtof(SRS_UL_US_FOOT_CONV)) < 0.00000001 )
nExtentUnits = 3;
else
nExtentUnits = 1;
}
}
if (nDatumCode != -2)
nExtendedHeaderLen += 26;
if (nUTMZone != 0)
nExtendedHeaderLen += 26;
if (nEPSGCode)
nExtendedHeaderLen += 26;
/* -------------------------------------------------------------------- */
/* Create target file */
/* -------------------------------------------------------------------- */
CPLString osFilename;
if (bCompress)
{
osFilename = "/vsigzip/";
osFilename += pszFilename;
}
else
osFilename = pszFilename;
VSILFILE* fp = VSIFOpenL(osFilename.c_str(), "wb");
if (fp == NULL)
{
CPLError( CE_Failure, CPLE_AppDefined,
"Cannot create %s", pszFilename );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Write header */
/* -------------------------------------------------------------------- */
VSIFWriteL("HF2\0", 4, 1, fp);
WriteShort(fp, 0);
WriteInt(fp, nXSize);
WriteInt(fp, nYSize);
WriteShort(fp, (GInt16) nTileSize);
WriteFloat(fp, fVertPres);
float fHorizScale = (float) ((fabs(adfGeoTransform[1]) + fabs(adfGeoTransform[5])) / 2);
WriteFloat(fp, fHorizScale);
WriteInt(fp, nExtendedHeaderLen);
/* -------------------------------------------------------------------- */
/* Write extended header */
/* -------------------------------------------------------------------- */
char szBlockName[16 + 1];
if (bHasGeoTransform)
{
VSIFWriteL("bin\0", 4, 1, fp);
memset(szBlockName, 0, 16 + 1);
strcpy(szBlockName, "georef-extents");
VSIFWriteL(szBlockName, 16, 1, fp);
示例4: VSIFOpenL
GDALDataset *VICARDataset::Open( GDALOpenInfo * poOpenInfo )
{
/* -------------------------------------------------------------------- */
/* Does this look like a VICAR dataset? */
/* -------------------------------------------------------------------- */
if( !Identify( poOpenInfo ) )
return NULL;
/* -------------------------------------------------------------------- */
/* Open the file using the large file API. */
/* -------------------------------------------------------------------- */
VSILFILE *fpQube = VSIFOpenL( poOpenInfo->pszFilename, "rb" );
if( fpQube == NULL )
return NULL;
VICARDataset *poDS;
poDS = new VICARDataset();
if( ! poDS->oKeywords.Ingest( fpQube, poOpenInfo->pabyHeader ) ) {
VSIFCloseL( fpQube );
delete poDS;
return NULL;
}
VSIFCloseL( fpQube );
CPLString osQubeFile;
osQubeFile = poOpenInfo->pszFilename;
GDALDataType eDataType = GDT_Byte;
int nRows = -1;
int nCols = -1;
int nBands = 1;
int nSkipBytes = 0;
int bIsDTM = FALSE;
char chByteOrder = 'M';
double dfNoData = 0.0;
const char *value;
/***** CHECK ENDIANNESS **************/
value = poDS->GetKeyword( "INTFMT" );
if (!EQUAL(value,"LOW") ) {
CPLError( CE_Failure, CPLE_OpenFailed,
"%s layout not supported. Abort\n\n", value);
return FALSE;
}
value = poDS->GetKeyword( "REALFMT" );
if (!EQUAL(value,"RIEEE") ) {
CPLError( CE_Failure, CPLE_OpenFailed,
"%s layout not supported. Abort\n\n", value);
return FALSE;
}
value = poDS->GetKeyword( "BREALFMT" );
if (EQUAL(value,"VAX") ) {
chByteOrder = 'I';
}
/************ CHECK INSTRUMENT *****************/
/************ ONLY HRSC TESTED *****************/
value = poDS->GetKeyword( "DTM.DTM_OFFSET" );
if (!EQUAL(value,"") ) {
bIsDTM = TRUE;
}
value = poDS->GetKeyword( "BLTYPE" );
if (!EQUAL(value,"M94_HRSC") && bIsDTM==FALSE ) {
CPLError( CE_Failure, CPLE_OpenFailed,
"%s instrument not tested. Continue with caution!\n\n", value);
}
/*********** Grab layout type (BSQ, BIP, BIL) ************/
char szLayout[10] = "BSQ"; //default to band seq.
value = poDS->GetKeyword( "ORG" );
if (EQUAL(value,"BSQ") ) {
strcpy(szLayout,"BSQ");
nCols = atoi(poDS->GetKeyword("NS"));
nRows = atoi(poDS->GetKeyword("NL"));
nBands = atoi(poDS->GetKeyword("NB"));
}
else {
CPLError( CE_Failure, CPLE_OpenFailed,
"%s layout not supported. Abort\n\n", value);
return FALSE;
}
/*********** Grab record bytes **********/
nSkipBytes = atoi(poDS->GetKeyword("NBB"));
if (EQUAL( poDS->GetKeyword( "FORMAT" ), "BYTE" )) {
eDataType = GDT_Byte;
dfNoData = NULL1;
}
else if (EQUAL( poDS->GetKeyword( "FORMAT" ), "HALF" )) {
eDataType = GDT_Int16;
dfNoData = NULL2;
//.........这里部分代码省略.........
示例5: CPLAssert
VSIVirtualHandle *
VSISparseFileFilesystemHandler::Open( const char *pszFilename,
const char *pszAccess )
{
CPLAssert( EQUALN(pszFilename,"/vsisparse/", 11) );
if( !EQUAL(pszAccess,"r") && !EQUAL(pszAccess,"rb") )
{
errno = EACCES;
return NULL;
}
/* Arbitrary number */
if( GetRecCounter() == 32 )
return NULL;
CPLString osSparseFilePath = pszFilename + 11;
/* -------------------------------------------------------------------- */
/* Does this file even exist? */
/* -------------------------------------------------------------------- */
VSILFILE *fp = VSIFOpenL( osSparseFilePath, "r" );
if( fp == NULL )
return NULL;
VSIFCloseL( fp );
/* -------------------------------------------------------------------- */
/* Read the XML file. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psXMLRoot = CPLParseXMLFile( osSparseFilePath );
if( psXMLRoot == NULL )
return NULL;
/* -------------------------------------------------------------------- */
/* Setup the file handle on this file. */
/* -------------------------------------------------------------------- */
VSISparseFileHandle *poHandle = new VSISparseFileHandle(this);
/* -------------------------------------------------------------------- */
/* Translate the desired fields out of the XML tree. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psRegion;
for( psRegion = psXMLRoot->psChild;
psRegion != NULL;
psRegion = psRegion->psNext )
{
if( psRegion->eType != CXT_Element )
continue;
if( !EQUAL(psRegion->pszValue,"SubfileRegion")
&& !EQUAL(psRegion->pszValue,"ConstantRegion") )
continue;
SFRegion oRegion;
oRegion.osFilename = CPLGetXMLValue( psRegion, "Filename", "" );
if( atoi(CPLGetXMLValue( psRegion, "Filename.relative", "0" )) != 0 )
{
CPLString osSFPath = CPLGetPath(osSparseFilePath);
oRegion.osFilename = CPLFormFilename( osSFPath,
oRegion.osFilename, NULL );
}
oRegion.nDstOffset =
CPLScanUIntBig( CPLGetXMLValue(psRegion,"DestinationOffset","0" ),
32 );
oRegion.nSrcOffset =
CPLScanUIntBig( CPLGetXMLValue(psRegion,"SourceOffset","0" ), 32);
oRegion.nLength =
CPLScanUIntBig( CPLGetXMLValue(psRegion,"RegionLength","0" ), 32);
oRegion.byValue = (GByte) atoi(CPLGetXMLValue(psRegion,"Value","0" ));
poHandle->aoRegions.push_back( oRegion );
}
/* -------------------------------------------------------------------- */
/* Get sparse file length, use maximum bound of regions if not */
/* explicit in file. */
/* -------------------------------------------------------------------- */
poHandle->nOverallLength =
CPLScanUIntBig( CPLGetXMLValue(psXMLRoot,"Length","0" ), 32);
if( poHandle->nOverallLength == 0 )
{
unsigned int i;
for( i = 0; i < poHandle->aoRegions.size(); i++ )
{
poHandle->nOverallLength = MAX(poHandle->nOverallLength,
poHandle->aoRegions[i].nDstOffset
+ poHandle->aoRegions[i].nLength);
}
}
CPLDestroyXMLNode( psXMLRoot );
//.........这里部分代码省略.........
示例6: CSLFetchNameValue
//.........这里部分代码省略.........
hHdr1.HeaderType.Is2Dor3D = INGR_HEADER_2D;
hHdr1.DataTypeCode = (uint16) INGR_GetFormat( eType, (pszCompression!=NULL)?pszCompression:"None" );
hHdr1.WordsToFollow = ( ( SIZEOF_HDR1 * 3 ) / 2 ) - 2;
hHdr1.ApplicationType = GenericRasterImageFile;
hHdr1.XViewOrigin = 0.0;
hHdr1.YViewOrigin = 0.0;
hHdr1.ZViewOrigin = 0.0;
hHdr1.XViewExtent = 0.0;
hHdr1.YViewExtent = 0.0;
hHdr1.ZViewExtent = 0.0;
for( i = 0; i < 15; i++ )
hHdr1.TransformationMatrix[i] = 0.0;
hHdr1.TransformationMatrix[15] = 1.0;
hHdr1.PixelsPerLine = nXSize;
hHdr1.NumberOfLines = nYSize;
hHdr1.DeviceResolution = nDeviceResolution;
hHdr1.ScanlineOrientation = UpperLeftHorizontal;
hHdr1.ScannableFlag = NoLineHeader;
hHdr1.RotationAngle = 0.0;
hHdr1.SkewAngle = 0.0;
hHdr1.DataTypeModifier = 0;
hHdr1.DesignFileName[0] = '\0';
hHdr1.DataBaseFileName[0] = '\0';
hHdr1.ParentGridFileName[0] = '\0';
hHdr1.FileDescription[0] = '\0';
hHdr1.Minimum = INGR_SetMinMax( eType, 0.0 );
hHdr1.Maximum = INGR_SetMinMax( eType, 0.0 );
hHdr1.GridFileVersion = 3;
hHdr1.Reserved[0] = 0;
hHdr1.Reserved[1] = 0;
hHdr1.Reserved[2] = 0;
hHdr2.Gain = 0;
hHdr2.OffsetThreshold = 0;
hHdr2.View1 = 0;
hHdr2.View2 = 0;
hHdr2.ViewNumber = 0;
hHdr2.Reserved2 = 0;
hHdr2.Reserved3 = 0;
hHdr2.AspectRatio = nXSize / nYSize;
hHdr2.CatenatedFilePointer = 0;
hHdr2.ColorTableType = NoColorTable;
hHdr2.NumberOfCTEntries = 0;
hHdr2.Reserved8 = 0;
for( i = 0; i < 110; i++ )
hHdr2.Reserved[i] = 0;
hHdr2.ApplicationPacketLength = 0;
hHdr2.ApplicationPacketPointer = 0;
// --------------------------------------------------------------------
// RGB Composite assumption
// --------------------------------------------------------------------
if( eType == GDT_Byte &&
nBands == 3 )
{
hHdr1.DataTypeCode = Uncompressed24bit;
}
// --------------------------------------------------------------------
// Create output file with minimum header info
// --------------------------------------------------------------------
VSILFILE *fp = VSIFOpenL( pszFilename, "wb+" );
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Attempt to create file %s' failed.\n", pszFilename );
return NULL;
}
GByte abyBuf[MAX(SIZEOF_HDR1,SIZEOF_CTAB)];
INGR_HeaderOneMemToDisk( &hHdr1, abyBuf );
VSIFWriteL( abyBuf, 1, SIZEOF_HDR1, fp );
INGR_HeaderTwoAMemToDisk( &hHdr2, abyBuf );
VSIFWriteL( abyBuf, 1, SIZEOF_HDR2_A, fp );
unsigned int n = 0;
for( i = 0; i < 256; i++ )
{
STRC2BUF( abyBuf, n, hCTab.Entry[i].v_red );
STRC2BUF( abyBuf, n, hCTab.Entry[i].v_green );
STRC2BUF( abyBuf, n, hCTab.Entry[i].v_blue );
}
VSIFWriteL( abyBuf, 1, SIZEOF_CTAB, fp );
VSIFCloseL( fp );
// --------------------------------------------------------------------
// Returns a new IntergraphDataset from the created file
// --------------------------------------------------------------------
return ( IntergraphDataset * ) GDALOpen( pszFilename, GA_Update );
}
示例7: CPLDebug
int ISIS2Dataset::WriteLabel(
CPLString osFilename, CPLString osRasterFile, CPLString sObjectTag,
unsigned int nXSize, unsigned int nYSize, unsigned int nBands,
GDALDataType eType,
GUIntBig iRecords, const char * pszInterleaving,
GUIntBig &iLabelRecords,
CPL_UNUSED bool bRelaunch)
{
CPLDebug("ISIS2", "Write Label filename = %s, rasterfile = %s",osFilename.c_str(),osRasterFile.c_str());
bool bAttachedLabel = EQUAL(osRasterFile, "");
VSILFILE *fpLabel = VSIFOpenL( osFilename, "w" );
if( fpLabel == NULL ){
CPLError( CE_Failure, CPLE_FileIO,
"Failed to create %s:\n%s",
osFilename.c_str(), VSIStrerror( errno ) );
return FALSE;
}
unsigned int iLevel(0);
unsigned int nWritingBytes(0);
/* write common header */
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, "PDS_VERSION_ID", "PDS3" );
nWritingBytes += ISIS2Dataset::WriteFormatting( fpLabel, "");
nWritingBytes += ISIS2Dataset::WriteFormatting( fpLabel, "/* File identification and structure */");
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, "RECORD_TYPE", "FIXED_LENGTH" );
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, "RECORD_BYTES", CPLString().Printf("%d",RECORD_SIZE));
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, "FILE_RECORDS", CPLString().Printf(CPL_FRMT_GUIB,iRecords));
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, "LABEL_RECORDS", CPLString().Printf(CPL_FRMT_GUIB,iLabelRecords));
if(!bAttachedLabel){
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, "FILE_NAME", CPLGetFilename(osRasterFile));
}
nWritingBytes += ISIS2Dataset::WriteFormatting( fpLabel, "");
nWritingBytes += ISIS2Dataset::WriteFormatting( fpLabel, "/* Pointers to Data Objects */");
if(bAttachedLabel){
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, CPLString().Printf("^%s",sObjectTag.c_str()), CPLString().Printf(CPL_FRMT_GUIB,iLabelRecords+1));
}else{
nWritingBytes += ISIS2Dataset::WriteKeyword( fpLabel, iLevel, CPLString().Printf("^%s",sObjectTag.c_str()), CPLString().Printf("(\"%s\",1)",CPLGetFilename(osRasterFile)));
}
if(EQUAL(sObjectTag, "QUBE")){
ISIS2Dataset::WriteQUBE_Information(fpLabel, iLevel, nWritingBytes, nXSize, nYSize, nBands, eType, pszInterleaving);
}
nWritingBytes += ISIS2Dataset::WriteFormatting( fpLabel, "END");
// check if file record is correct
unsigned int q = nWritingBytes/RECORD_SIZE;
if( q <= iLabelRecords){
// correct we add space after the label end for complete from iLabelRecords
unsigned int nSpaceBytesToWrite = (unsigned int) (iLabelRecords * RECORD_SIZE - nWritingBytes);
VSIFPrintfL(fpLabel,"%*c", nSpaceBytesToWrite, ' ');
}else{
iLabelRecords = q+1;
ISIS2Dataset::WriteLabel(osFilename, osRasterFile, sObjectTag, nXSize, nYSize, nBands, eType, iRecords, pszInterleaving, iLabelRecords);
}
VSIFCloseL( fpLabel );
return TRUE;
}
示例8: CPLError
GDALDataset *GSBGDataset::Create( const char * pszFilename,
int nXSize, int nYSize, int nBands,
GDALDataType eType,
char **papszParmList )
{
if( nXSize <= 0 || nYSize <= 0 )
{
CPLError( CE_Failure, CPLE_IllegalArg,
"Unable to create grid, both X and Y size must be "
"non-negative.\n" );
return NULL;
}
else if( nXSize > SHRT_MAX
|| nYSize > SHRT_MAX )
{
CPLError( CE_Failure, CPLE_IllegalArg,
"Unable to create grid, Golden Software Binary Grid format "
"only supports sizes up to %dx%d. %dx%d not supported.\n",
SHRT_MAX, SHRT_MAX, nXSize, nYSize );
return NULL;
}
if( eType != GDT_Byte && eType != GDT_Float32 && eType != GDT_UInt16
&& eType != GDT_Int16 )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Golden Software ASCII Grid only supports Byte, Int16, "
"Uint16, and Float32 datatypes. Unable to create with "
"type %s.\n", GDALGetDataTypeName( eType ) );
return NULL;
}
VSILFILE *fp = VSIFOpenL( pszFilename, "w+b" );
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Attempt to create file '%s' failed.\n",
pszFilename );
return NULL;
}
CPLErr eErr = WriteHeader( fp, (GInt16) nXSize, (GInt16) nYSize,
0.0, nXSize, 0.0, nYSize, 0.0, 0.0 );
if( eErr != CE_None )
{
VSIFCloseL( fp );
return NULL;
}
float fVal = fNODATA_VALUE;
CPL_LSBPTR32( &fVal );
for( int iRow = 0; iRow < nYSize; iRow++ )
{
for( int iCol=0; iCol<nXSize; iCol++ )
{
if( VSIFWriteL( (void *)&fVal, 4, 1, fp ) != 1 )
{
VSIFCloseL( fp );
CPLError( CE_Failure, CPLE_FileIO,
"Unable to write grid cell. Disk full?\n" );
return NULL;
}
}
}
VSIFCloseL( fp );
return (GDALDataset *)GDALOpen( pszFilename, GA_Update );
}
示例9: strcpy
GDALOpenInfo::GDALOpenInfo( const char * pszFilenameIn, GDALAccess eAccessIn,
char **papszSiblingsIn )
{
/* -------------------------------------------------------------------- */
/* Ensure that C: is treated as C:\ so we can stat it on */
/* Windows. Similar to what is done in CPLStat(). */
/* -------------------------------------------------------------------- */
#ifdef WIN32
if( strlen(pszFilenameIn) == 2 && pszFilenameIn[1] == ':' )
{
char szAltPath[10];
strcpy( szAltPath, pszFilenameIn );
strcat( szAltPath, "\\" );
pszFilename = CPLStrdup( szAltPath );
}
else
#endif
pszFilename = CPLStrdup( pszFilenameIn );
/* -------------------------------------------------------------------- */
/* Initialize. */
/* -------------------------------------------------------------------- */
nHeaderBytes = 0;
pabyHeader = NULL;
bIsDirectory = FALSE;
bStatOK = FALSE;
eAccess = eAccessIn;
fp = NULL;
#ifdef HAVE_READLINK
int bHasRetried = FALSE;
#endif
/* -------------------------------------------------------------------- */
/* Collect information about the file. */
/* -------------------------------------------------------------------- */
VSIStatBufL sStat;
#ifdef HAVE_READLINK
retry:
#endif
if( VSIStatExL( pszFilename, &sStat,
VSI_STAT_EXISTS_FLAG | VSI_STAT_NATURE_FLAG ) == 0 )
{
bStatOK = TRUE;
if( VSI_ISREG( sStat.st_mode ) )
{
pabyHeader = (GByte *) CPLCalloc(1025,1);
fp = VSIFOpen( pszFilename, "rb" );
if( fp != NULL )
{
nHeaderBytes = (int) VSIFRead( pabyHeader, 1, 1024, fp );
VSIRewind( fp );
}
/* XXX: ENOENT is used to catch the case of virtual filesystem
* when we do not have a real file with such a name. Under some
* circumstances EINVAL reported instead of ENOENT in Windows
* (for filenames containing colon, e.g. "smth://name").
* See also: #2437 */
else if( errno == 27 /* "File to large" */
|| errno == ENOENT || errno == EINVAL
#ifdef EOVERFLOW
|| errno == EOVERFLOW
#else
|| errno == 75 /* Linux EOVERFLOW */
|| errno == 79 /* Solaris EOVERFLOW */
#endif
)
{
VSILFILE* fpL = VSIFOpenL( pszFilename, "rb" );
if( fpL != NULL )
{
nHeaderBytes = (int) VSIFReadL( pabyHeader, 1, 1024, fpL );
VSIFCloseL( fpL );
}
}
}
else if( VSI_ISDIR( sStat.st_mode ) )
bIsDirectory = TRUE;
}
#ifdef HAVE_READLINK
else if (!bHasRetried)
{
/* If someone creates a file with "ln -sf /vsicurl/http://download.osgeo.org/gdal/data/gtiff/utm.tif my_remote_utm.tif" */
/* we will be able to open it by passing my_remote_utm.tif */
/* This helps a lot for GDAL based readers that only provide file explorers to open datasets */
char szPointerFilename[2048];
int nBytes = readlink(pszFilename, szPointerFilename, sizeof(szPointerFilename));
if (nBytes != -1)
{
szPointerFilename[MIN(nBytes, (int)sizeof(szPointerFilename)-1)] = 0;
CPLFree(pszFilename);
pszFilename = CPLStrdup(szPointerFilename);
//.........这里部分代码省略.........
示例10: GSBGDataset
GDALDataset *GSBGDataset::Open( GDALOpenInfo * poOpenInfo )
{
/* Check for signature */
if( poOpenInfo->nHeaderBytes < 4
|| !EQUALN((const char *) poOpenInfo->pabyHeader,"DSBB",4) )
{
return NULL;
}
/* -------------------------------------------------------------------- */
/* Create a corresponding GDALDataset. */
/* -------------------------------------------------------------------- */
GSBGDataset *poDS = new GSBGDataset();
/* -------------------------------------------------------------------- */
/* Open file with large file API. */
/* -------------------------------------------------------------------- */
poDS->eAccess = poOpenInfo->eAccess;
if( poOpenInfo->eAccess == GA_ReadOnly )
poDS->fp = VSIFOpenL( poOpenInfo->pszFilename, "rb" );
else
poDS->fp = VSIFOpenL( poOpenInfo->pszFilename, "r+b" );
if( poDS->fp == NULL )
{
delete poDS;
CPLError( CE_Failure, CPLE_OpenFailed,
"VSIFOpenL(%s) failed unexpectedly.",
poOpenInfo->pszFilename );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Read the header. */
/* -------------------------------------------------------------------- */
if( VSIFSeekL( poDS->fp, 4, SEEK_SET ) != 0 )
{
delete poDS;
CPLError( CE_Failure, CPLE_FileIO,
"Unable to seek to start of grid file header.\n" );
return NULL;
}
/* Parse number of X axis grid rows */
GInt16 nTemp;
if( VSIFReadL( (void *)&nTemp, 2, 1, poDS->fp ) != 1 )
{
delete poDS;
CPLError( CE_Failure, CPLE_FileIO, "Unable to read raster X size.\n" );
return NULL;
}
poDS->nRasterXSize = CPL_LSBWORD16( nTemp );
if( VSIFReadL( (void *)&nTemp, 2, 1, poDS->fp ) != 1 )
{
delete poDS;
CPLError( CE_Failure, CPLE_FileIO, "Unable to read raster Y size.\n" );
return NULL;
}
poDS->nRasterYSize = CPL_LSBWORD16( nTemp );
if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize))
{
delete poDS;
return NULL;
}
/* -------------------------------------------------------------------- */
/* Create band information objects. */
/* -------------------------------------------------------------------- */
GSBGRasterBand *poBand = new GSBGRasterBand( poDS, 1 );
double dfTemp;
if( VSIFReadL( (void *)&dfTemp, 8, 1, poDS->fp ) != 1 )
{
delete poDS;
CPLError( CE_Failure, CPLE_FileIO,
"Unable to read minimum X value.\n" );
return NULL;
}
CPL_LSBPTR64( &dfTemp );
poBand->dfMinX = dfTemp;
if( VSIFReadL( (void *)&dfTemp, 8, 1, poDS->fp ) != 1 )
{
delete poDS;
CPLError( CE_Failure, CPLE_FileIO,
"Unable to read maximum X value.\n" );
return NULL;
}
CPL_LSBPTR64( &dfTemp );
poBand->dfMaxX = dfTemp;
if( VSIFReadL( (void *)&dfTemp, 8, 1, poDS->fp ) != 1 )
{
delete poDS;
CPLError( CE_Failure, CPLE_FileIO,
"Unable to read minimum Y value.\n" );
return NULL;
//.........这里部分代码省略.........
示例11: sprintf
int TigerFileBase::SetWriteModule( const char *pszExtension, CPL_UNUSED int nRecLen,
OGRFeature *poFeature )
{
/* -------------------------------------------------------------------- */
/* Work out what module we should be writing to. */
/* -------------------------------------------------------------------- */
const char *pszTargetModule = poFeature->GetFieldAsString( "MODULE" );
char szFullModule[30];
/* TODO/notdef: eventually more logic based on FILE and STATE/COUNTY can
be inserted here. */
if( pszTargetModule == NULL )
return FALSE;
sprintf( szFullModule, "%s.RT", pszTargetModule );
/* -------------------------------------------------------------------- */
/* Is this our current module? */
/* -------------------------------------------------------------------- */
if( pszModule != NULL && EQUAL(szFullModule,pszModule) )
return TRUE;
/* -------------------------------------------------------------------- */
/* Cleanup the previous file, if any. */
/* -------------------------------------------------------------------- */
if( fpPrimary != NULL )
{
VSIFCloseL( fpPrimary );
fpPrimary = NULL;
}
if( pszModule != NULL )
{
CPLFree( pszModule );
pszModule = NULL;
}
/* -------------------------------------------------------------------- */
/* Is this a module we have never written to before? If so, we */
/* will try to blow away any existing files in this file set. */
/* -------------------------------------------------------------------- */
if( !poDS->CheckModule( szFullModule ) )
{
poDS->DeleteModuleFiles( szFullModule );
poDS->AddModule( szFullModule );
}
/* -------------------------------------------------------------------- */
/* Does this file already exist? */
/* -------------------------------------------------------------------- */
char *pszFilename;
pszFilename = poDS->BuildFilename( szFullModule, pszExtension );
fpPrimary = VSIFOpenL( pszFilename, "ab" );
CPLFree(pszFilename);
if( fpPrimary == NULL )
return FALSE;
pszModule = CPLStrdup( szFullModule );
return TRUE;
}
示例12: VSIFReadL
bool GTM::isValid()
{
// 2 bytes - version number
// 10 bytes - "TrackMaker" string
char buffer[13];
char* szHeader;
short version;
/* -------------------------------------------------------------------- */
/* If we aren't sure it is GTM, load a header chunk and check */
/* for signs it is GTM */
/* -------------------------------------------------------------------- */
size_t nRead = VSIFReadL( buffer, 1, sizeof(buffer)-1, pGTMFile );
if (nRead <= 0)
{
VSIFCloseL( pGTMFile );
pGTMFile = NULL;
return FALSE;
}
buffer[12] = '\0';
/* -------------------------------------------------------------------- */
/* If it looks like a GZip header, this may be a .gtz file, so */
/* try opening with the /vsigzip/ prefix */
/* -------------------------------------------------------------------- */
if (buffer[0] == 0x1f && ((unsigned char*)buffer)[1] == 0x8b &&
strncmp(pszFilename, "/vsigzip/", strlen("/vsigzip/")) != 0)
{
char* pszGZIPFileName = (char*)CPLMalloc(
strlen("/vsigzip/") + strlen(pszFilename) + 1);
sprintf(pszGZIPFileName, "/vsigzip/%s", pszFilename);
FILE* fp = VSIFOpenL(pszGZIPFileName, "rb");
if (fp)
{
FILE* pGTMFileOri = pGTMFile;
pGTMFile = fp;
if (isValid())
{
VSIFCloseL(pGTMFileOri);
return TRUE;
}
else
{
if (pGTMFile)
VSIFCloseL(pGTMFile);
pGTMFile = pGTMFileOri;
}
}
CPLFree(pszGZIPFileName);
}
version = CPL_LSBINT16PTR(buffer);
/*Skip string length */
szHeader = buffer + 2;
if (version == 211 && strcmp(szHeader, "TrackMaker") == 0 )
{
return TRUE;
}
return FALSE;
}
示例13: EpsilonDatasetCreateCopy
//.........这里部分代码省略.........
{
CPLError(CE_Failure, CPLE_NotSupported,
"MODE=OTLPF can only be used with biorthogonal filters. "
"Use MODE=NORMAL instead");
return NULL;
}
int bRasterliteOutput =
CPLTestBool(CSLFetchNameValueDef(papszOptions,
"RASTERLITE_OUTPUT", "NO"));
int nYRatio = EPS_Y_RT;
int nCbRatio = EPS_Cb_RT;
int nCrRatio = EPS_Cr_RT;
int eResample;
if (CPLTestBool(CSLFetchNameValueDef(papszOptions,
"RGB_RESAMPLE", "YES")))
eResample = EPS_RESAMPLE_420;
else
eResample = EPS_RESAMPLE_444;
const char* pszTarget = CSLFetchNameValueDef(papszOptions, "TARGET", "96");
double dfReductionFactor = 1 - CPLAtof(pszTarget) / 100;
if (dfReductionFactor > 1)
dfReductionFactor = 1;
else if (dfReductionFactor < 0)
dfReductionFactor = 0;
/* -------------------------------------------------------------------- */
/* Open file */
/* -------------------------------------------------------------------- */
VSILFILE* fp = VSIFOpenL(pszFilename, "wb");
if (fp == NULL)
{
CPLError(CE_Failure, CPLE_AppDefined, "Cannot create %s", pszFilename);
return NULL;
}
/* -------------------------------------------------------------------- */
/* Compute number of blocks, block size, etc... */
/* -------------------------------------------------------------------- */
int nXSize = poSrcDS->GetRasterXSize();
int nYSize = poSrcDS->GetRasterYSize();
if (eMode == EPS_MODE_OTLPF)
{
nBlockXSize ++;
nBlockYSize ++;
}
int nXBlocks = (nXSize + nBlockXSize - 1) / nBlockXSize;
int nYBlocks = (nYSize + nBlockYSize - 1) / nBlockYSize;
int nBlocks = nXBlocks * nYBlocks;
int nUncompressedFileSize = nXSize * nYSize * nBands;
int nUncompressedBlockSize = nUncompressedFileSize / nBlocks;
int nTargetBlockSize = (int) (dfReductionFactor * nUncompressedBlockSize);
if (nBands == 1)
nTargetBlockSize = MAX (nTargetBlockSize, EPS_MIN_GRAYSCALE_BUF + 1);
else
nTargetBlockSize = MAX (nTargetBlockSize, EPS_MIN_TRUECOLOR_BUF + 1);
/* -------------------------------------------------------------------- */
/* Allocate work buffers */
/* -------------------------------------------------------------------- */
示例14: LANDataset
GDALDataset *LANDataset::Open( GDALOpenInfo * poOpenInfo )
{
/* -------------------------------------------------------------------- */
/* We assume the user is pointing to the header (.pcb) file. */
/* Does this appear to be a pcb file? */
/* -------------------------------------------------------------------- */
if( poOpenInfo->nHeaderBytes < ERD_HEADER_SIZE || poOpenInfo->fp == NULL )
return NULL;
if( !EQUALN((const char *)poOpenInfo->pabyHeader,"HEADER",6)
&& !EQUALN((const char *)poOpenInfo->pabyHeader,"HEAD74",6) )
return NULL;
/* -------------------------------------------------------------------- */
/* Create a corresponding GDALDataset. */
/* -------------------------------------------------------------------- */
LANDataset *poDS;
poDS = new LANDataset();
poDS->eAccess = poOpenInfo->eAccess;
/* -------------------------------------------------------------------- */
/* Adopt the openinfo file pointer for use with this file. */
/* -------------------------------------------------------------------- */
if( poOpenInfo->eAccess == GA_ReadOnly )
poDS->fpImage = VSIFOpenL( poOpenInfo->pszFilename, "rb" );
else
poDS->fpImage = VSIFOpenL( poOpenInfo->pszFilename, "rb+" );
if( poDS->fpImage == NULL )
return NULL;
/* -------------------------------------------------------------------- */
/* Do we need to byte swap the headers to local machine order? */
/* -------------------------------------------------------------------- */
int bBigEndian = poOpenInfo->pabyHeader[8] == 0;
int bNeedSwap;
memcpy( poDS->pachHeader, poOpenInfo->pabyHeader, ERD_HEADER_SIZE );
#ifdef CPL_LSB
bNeedSwap = bBigEndian;
#else
bNeedSwap = !bBigEndian;
#endif
if( bNeedSwap )
{
CPL_SWAP16PTR( poDS->pachHeader + 6 );
CPL_SWAP16PTR( poDS->pachHeader + 8 );
CPL_SWAP32PTR( poDS->pachHeader + 16 );
CPL_SWAP32PTR( poDS->pachHeader + 20 );
CPL_SWAP32PTR( poDS->pachHeader + 24 );
CPL_SWAP32PTR( poDS->pachHeader + 28 );
CPL_SWAP16PTR( poDS->pachHeader + 88 );
CPL_SWAP16PTR( poDS->pachHeader + 90 );
CPL_SWAP16PTR( poDS->pachHeader + 106 );
CPL_SWAP32PTR( poDS->pachHeader + 108 );
CPL_SWAP32PTR( poDS->pachHeader + 112 );
CPL_SWAP32PTR( poDS->pachHeader + 116 );
CPL_SWAP32PTR( poDS->pachHeader + 120 );
CPL_SWAP32PTR( poDS->pachHeader + 124 );
}
/* -------------------------------------------------------------------- */
/* Capture some information from the file that is of interest. */
/* -------------------------------------------------------------------- */
int nBandCount, nPixelOffset;
GDALDataType eDataType;
if( EQUALN(poDS->pachHeader,"HEADER",7) )
{
poDS->nRasterXSize = (int) *((float *) (poDS->pachHeader + 16));
poDS->nRasterYSize = (int) *((float *) (poDS->pachHeader + 20));
}
else
{
poDS->nRasterXSize = *((GInt32 *) (poDS->pachHeader + 16));
poDS->nRasterYSize = *((GInt32 *) (poDS->pachHeader + 20));
}
if( *((GInt16 *) (poDS->pachHeader + 6)) == 0 )
{
eDataType = GDT_Byte;
nPixelOffset = 1;
}
else if( *((GInt16 *) (poDS->pachHeader + 6)) == 1 ) /* 4bit! */
{
eDataType = GDT_Byte;
nPixelOffset = -1;
}
else if( *((GInt16 *) (poDS->pachHeader + 6)) == 2 )
{
nPixelOffset = 2;
eDataType = GDT_Int16;
}
//.........这里部分代码省略.........
示例15: CEOSOpen
CEOSImage * CEOSOpen( const char * pszFilename, const char * pszAccess )
{
VSILFILE *fp;
CEOSRecord *psRecord;
CEOSImage *psImage;
int nSeqNum, i;
GByte abyHeader[16];
/* -------------------------------------------------------------------- */
/* Try to open the imagery file. */
/* -------------------------------------------------------------------- */
fp = VSIFOpenL( pszFilename, pszAccess );
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Failed to open CEOS file `%s' with access `%s'.\n",
pszFilename, pszAccess );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Create a CEOSImage structure, and initialize it. */
/* -------------------------------------------------------------------- */
psImage = (CEOSImage *) CPLCalloc(1,sizeof(CEOSImage));
psImage->fpImage = fp;
psImage->nPixels = psImage->nLines = psImage->nBands = 0;
/* -------------------------------------------------------------------- */
/* Preread info on the first record, to establish if it is */
/* little endian. */
/* -------------------------------------------------------------------- */
if( VSIFReadL( abyHeader, 16, 1, fp ) != 1 ||
VSIFSeekL( fp, 0, SEEK_SET ) < 0 )
{
CEOSClose( psImage );
return NULL;
}
if( abyHeader[0] != 0 || abyHeader[1] != 0 )
psImage->bLittleEndian = TRUE;
/* -------------------------------------------------------------------- */
/* Try to read the header record. */
/* -------------------------------------------------------------------- */
psRecord = CEOSReadRecord( psImage );
if( psRecord == NULL )
{
CEOSClose( psImage );
return NULL;
}
if( psRecord->nRecordType != CRT_IMAGE_FDR )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Got a %X type record, instead of the expected\n"
"file descriptor record on file %s.\n",
psRecord->nRecordType, pszFilename );
CEOSDestroyRecord( psRecord );
CEOSClose( psImage );
return NULL;
}
/* -------------------------------------------------------------------- */
/* The sequence number should be 2 indicating this is the */
/* imagery file. */
/* -------------------------------------------------------------------- */
nSeqNum = CEOSScanInt( psRecord->pachData + 44, 4 );
if( nSeqNum != 2 )
{
CPLError( CE_Warning, CPLE_AppDefined,
"Got a %d file sequence number, instead of the expected\n"
"2 indicating imagery on file %s.\n"
"Continuing to access anyways.\n",
nSeqNum, pszFilename );
}
/* -------------------------------------------------------------------- */
/* Extract various information. */
/* -------------------------------------------------------------------- */
psImage->nImageRecCount = CEOSScanInt( psRecord->pachData+180, 6 );
psImage->nImageRecLength = CEOSScanInt( psRecord->pachData+186, 6 );
psImage->nBitsPerPixel = CEOSScanInt( psRecord->pachData+216, 4 );
psImage->nBands = CEOSScanInt( psRecord->pachData+232, 4 );
psImage->nLines = CEOSScanInt( psRecord->pachData+236, 8 );
psImage->nPixels = CEOSScanInt( psRecord->pachData+248, 8 );
psImage->nPrefixBytes = CEOSScanInt( psRecord->pachData+276, 4 );
psImage->nSuffixBytes = CEOSScanInt( psRecord->pachData+288, 4 );
if( psImage->nImageRecLength <= 0 ||
psImage->nPrefixBytes < 0 ||
psImage->nBands > INT_MAX / psImage->nImageRecLength ||
(size_t)psImage->nBands > INT_MAX / sizeof(int))
{
CEOSDestroyRecord( psRecord );
//.........这里部分代码省略.........