Opened 16 years ago

Closed 16 years ago

#2530 closed defect (duplicate)

delete feature of shape layer

Reported by: 27949218 Owned by: FrankW
Priority: normal Milestone:
Component: OGR_SF Version: 1.4.1
Severity: normal Keywords: delete feature, shapelayer
Cc:

Description

i try to delete features from a set of shape file, sometimes get error. I use this version of ogrshapelayer.cpp: http://trac.osgeo.org/gdal/changeset/10969 . Delete feature in two ways would get different result, and both don't work smoothly:

(1) for(iFeat=0;iFeat<nFeat;iFeat++)

{

int cplE = pLayer->DeleteFeature(0); if(cplE==CE_None)

{

OGRShapeLayer* pShpLayer = (OGRShapeLayer*)pLayer; cplE = pShpLayer->Repack(); if(cplE!=CE_None) {

printf("delete feature failed !\n"); return false;

}

}

}

int nFeatRest = pLayer->GetFeatureCount();

These codes could delete each feature with returned value CE_None, and at the end nFeatRest=0. But when ran to pShpLayer->Repack() second, the error occurs: "Failure writing DBF record 0", it jumped untill all features were deleted.

(2) for(iFeat=nFeat-1;iFeat>=0;iFeat--)

{

int cplE = pLayer->DeleteFeature(iFeat);

if(cplE==CE_None) {

OGRShapeLayer* pShpLayer = (OGRShapeLayer*)pLayer; cplE = pShpLayer->Repack(); if(cplE!=CE_None)

{

printf("delete feature failed !\n");

return false; }

}

}

int nFeatRest = pLayer->GetFeatureCount();

These codes could delete each feature with returned value CE_None, but at the end nFeatRest>0 and nFeatRest<nFeat, some features were NOT deleted yet! Same as (1), when ran to pShpLayer->Repack() second, the error occurs: "Failure writing DBF record iFeat", it jumped untill all features were deleted. Trace the error "Failure writing DBF record ..." into Repack():

/* -------------------------------------------------------------------- */ /* Build a list of records to be dropped. */ /* -------------------------------------------------------------------- */

... for( iShape = 0; iShape < nTotalShapeCount; iShape++ ) {

if( DBFIsRecordDeleted( hDBF, iShape ) )------------ERROR jumped ---------

panRecordsToDelete[nDeleteCount++] = iShape;

}

I'm confused...

Change History (1)

comment:1 by Even Rouault, 16 years ago

Resolution: duplicate
Status: newclosed

Duplicate of #2531

Note: See TracTickets for help on using tickets.