Ver Mensaje Individual
  #7  
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 pathBYTE *originalSIZE_T sizeOriginalBYTE *reemplazoSIZE_T sizeReemplazobool overwrite)
{
    
std::auto_ptr<TMemoryStreampmsOriginal(new TMemoryStream);
    
std::auto_ptr<TMemoryStreampmsNuevo(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(
== original[0]){
                    
pos pms->Position 1;
                    for(
i=1<= sizeOriginal; ++i){
                        
pmsOriginal->Read(&c,1);
                        if(
!= original[i])
                            break;
                    }
                    if(
== 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