[gdal-dev] deleting feature exceptions

=?gbk?B?d293?= 27949218 at qq.com
Thu Aug 14 21:54:23 EDT 2008


Hi,
    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:
 (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;
    }
    Why did this phenomena occurs? 
     Thank you.
     
 ------------------
  To the world you're little, but to a person you're the world.
                                             Chen Xuexia
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20080815/23f62390/attachment.html


More information about the gdal-dev mailing list