![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Te respondo sin hacer uso de la VCL, sólo con API de windows
Código:
int Search(char *Buffer, char *S, int SizeBuffer)
{
for(int n= 0; n<SizeBuffer-lstrlen(S); n++){
if(Buffer[n] == *S){
int i=1;
for(; S[i]; i++)
if(Buffer[n+i]!=S[i]) break;
if(i==lstrlen(S)) return n;
}
}
return -1;
}
void Inserta(char *FileNameA, char *FileNameB)
{
HANDLE hFileA = CreateFile(FileNameA, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0);
if(hFileA!=(HANDLE)(-1)){
HANDLE hFileB = CreateFile(FileNameB, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0);
if(hFileB!=(HANDLE)(-1)){
DWORD SizeA = GetFileSize(hFileA, 0);
DWORD SizeB = GetFileSize(hFileA, 0);
char* BufferA = new char[SizeA];
char* BufferB = new char[SizeB];
_lread((int)hFileA, BufferA, SizeA);
_lread((int)hFileB, BufferB, SizeB);
int IniB = Search(BufferB, "<body>", SizeB);
if(IniB!=-1){
int FinB = Search(BufferB+IniB, "</body>", SizeB)+IniB;
if(FinB!=-1){
int IniA = Search(BufferA, "<body>", SizeA);
if(IniA!=-1){
int FinA = Search(BufferA+IniA, "</body>", SizeA)+IniA;
if(FinA!=-1){
_llseek((int)hFileA, FILE_BEGIN, 0);
SetEndOfFile(hFileA);
_lwrite((int)hFileA, BufferA, IniA);
_lwrite((int)hFileA, BufferB + IniB, FinB-IniB);
_lwrite((int)hFileA, BufferA + FinA, SizeA-FinA);
}
}
}
}
delete [] BufferA;
delete [] BufferB;
}
CloseHandle(hFileB);
}
CloseHandle(hFileA);
}
Saludos. |
|
#2
|
||||
|
||||
|
guau!!! He visto que te has liado y has cambiado algun nombre pero increible amigo. ¡Muchas gracias! Ya lo probaré en cuanto pueda.
|
|
#3
|
||||
|
||||
|
Ahora que lo dices y mirando el mensaje, si. Las prisas y el copy/paste de líneas de código similares...
Donde dice Código:
DWORD SizeB = GetFileSize(hFileA, 0); Código:
DWORD SizeB = GetFileSize(hFileB, 0); Saludos. |
|
#4
|
||||
|
||||
|
nooo si es fantastico que sea case sensitive. Ahora tengo otra duda, igual que insrto texto, tambien tengo que sustituir texto que se encuentre entre etiquetas, por ejemplo, entre <title> y </title> sustituir lo que haya por lo que hay en el otro archivo entre esas mismas etiquetas. Se me ocurre hacer una copia de la funcion insert y modificarla un poco para que haga eso. Ahora bien, asi tendria que abrir y cerrar el archivo mas de una vez. No se si eso ralentizaria el proceso. ¿Que opinas?
|
|
#5
|
||||
|
||||
|
En realidad la función sustituye texto, no inserta. El nombre de la función no es muy afortunado...
Saludos. |
|
#6
|
||||
|
||||
|
no me entendiste, la tuya si insertaria pero la idea es usar una copia de la tuya algo modificada a la que llamariamos Replace o algo asi y poder usar tanto Insert como Replace por separado.
|
|
#7
|
||||
|
||||
|
Cita:
Saludos. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Intercalar Forms | Jorge Hernández | Varios | 4 | 30-04-2014 18:58:12 |
| intercalar digitos | luisito2011 | Varios | 6 | 04-12-2012 18:38:57 |
| intercalar paginas con fastreport | mferrero | Impresión | 1 | 26-02-2008 13:36:54 |
| Intercalar Variable en SQL... | foetus | SQL | 7 | 09-07-2007 02:21:28 |
| Como puedo grabar texto en un Archivo de Texto sin Sobreescribir???? | AGAG4 | Varios | 12 | 08-11-2005 22:53:00 |
|