Ver Mensaje Individual
  #5  
Antiguo 12-06-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
Así quedaría mi función de reemplazo:
Código PHP:
bool __fastcall TForm1::Replace(WideString path, BYTE *original, SIZE_T sizeOriginal, BYTE *reemplazo, SIZE_T sizeReemplazo, bool overwrite)
{
    
std::auto_ptr<TMemoryStream> pmsOriginal(new TMemoryStream);
    
std::auto_ptr<TMemoryStream> pmsNuevo(new TMemoryStream);

    
char c;
    
int i;
    
long pos = 0;
    
bool founded = false;
    
    try
    {
        
pmsOriginal->LoadFromFile(path);
        do{
            
pmsOriginal->Read(&c,1);
            if(
pmsOriginal->Position + sizeOriginal <= pmsOriginal->Size){
                if(
c == original[0]){
                    
pos = pms->Position - 1;
                    for(
i=1; i <= sizeOriginal; ++i){
                        
pmsOriginal->Read(&c,1);
                        if(
c != original[i])
                            break;
                    }
                    if(
i == sizeOriginal){
                        
pmsNuevo->Write(reemplazo,sizeReemplazo);
                        
founded = true;
                    }
                    else
                    {
                        
pmsOriginal->Seek(pos,soBeginning);
                    }
                    
pmsOriginal->Read(&c,1);

                }
            }
            
pmsNuevo->Write(&c,1);
        }while(
pmsOriginal->Position < pmsOriginal->Size);

        if(
founded){
            
WideString pathDestino;
            if(
overwrite)
                
pathDestino = path;
            else
                
pathDestino = path.SubString(1,path.Length() - ExtractFileExt(path).Length()) + "_copia" + ExtractFileExt(path);
            
pmsNuevo->SaveToFile(pathDestino);
        }
    }
    catch(...)
    {
        
ShowMessage("Streaming error.");
    }
    return 
founded;
} 
Si piensas que debo cambiar algo soy todo oídos.
Responder Con Cita