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.