Ver Mensaje Individual
  #4  
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
De momento he conseguido esto:
Código PHP:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    
std::auto_ptr<TMemoryStreampms(new TMemoryStream);
    
std::auto_ptr<TMemoryStreampms2(new TMemoryStream);

    
char c;
    
int i;
    
long pos 0;
    
bool modified false;

    if(
OpenDialog1->Execute()){
        try
        {
            
pms->LoadFromFile(OpenDialog1->FileName);
            do{
                
pms->Read(&c,1);
                
//BUSQUEDA ANSISTRING
                
if(pms->Position EditTextOriginal->Text.Length() <= pms->Size){
                    if(
== EditTextOriginal->Text[1]){
                        
pos pms->Position 1;
                        for(
i=2<= EditTextOriginal->Text.Length(); ++i){
                            
pms->Read(&c,1);
                            if(
!= EditTextOriginal->Text[i])
                                break;
                        }
                        
i--;
                        if(
== EditTextOriginal->Text.Length()){
                            
pms2->Write(AnsiString(EditTextNew->Text).c_str(),EditTextNew->Text.Length());
                            
modified true;
                        }
                        else
                        {
                            
pms->Seek(pos,soBeginning);
                        }
                        
pms->Read(&c,1);

                    }
                }
                
pms2->Write(&c,1);
            }while(
pms->Position pms->Size);

            if(
modified){
                
AnsiString ficheroNuevo OpenDialog1->FileName.SubString(1,OpenDialog1->FileName.Length() - ExtractFileExt(OpenDialog1->FileName).Length()) + "_copia" ExtractFileExt(OpenDialog1->FileName);
                
pms2->SaveToFile(ficheroNuevo);
            }
        }
        catch(...)
        {
            
ShowMessage("Streaming error.");
        }
    }

Con este código consigo hacer lo que quiero en un archivo concreto usando AnsiString para la sustitución. Tengo que seguir estudiando a ver como lo hago para Unicode y para binario. Supongo que para Unicode tendré que usar wchar_t y leer de dos en dos los bytes ¿es así?
Cualquier ayuda me vendrá bien ya que estoy tocando algo que nunca había hecho antes. El tema de leer todos los archivos de un directorio no tengo problemas para hacerlo.
Responder Con Cita