Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
si archivo existe renombrar con parametro

hola amigos como el titulo dice
verifico si existe fichero de destino y muestro un mensaje si desea reemplazar
pero quiero eliminar eso y si existe nombrar con una constante por ejemplo
si existe miarchivo.zzz
nombrar como miarchivo(1).zzz
si existe miarchivo(1).zzz
nombrar como miarchivo(2).zzz
y así sucesivamente...

gracias
Saludos!!
Responder Con Cita
  #2  
Antiguo 21-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Una forma podría ser:
Código Delphi [-]
...
uses StrUtils;

procedure TomarNombre(Nombre: string; var Nuevo: string);
var
  Num: Integer;
  Ext: string;
begin
  if FileExists(Nombre) then
  begin
    Ext := ExtractFileExt(Nombre);
    Nombre := LeftStr(Nombre, Length(Nombre) - Length(Ext));
    if Pos('(', Nombre) = 0 then
    begin
      Num := 1;
      Nombre := Nombre + '(' + IntToStr(Num) + ')' + Ext;
    end
    else
    begin
      Num := StrToInt(Copy(Nombre, Pos('(', Nombre)+1,
        PosEx(')',Nombre, Pos('(', Nombre))-Pos('(', Nombre)-1));
      Inc(Num);
      Nombre := Copy(Nombre,1,Pos('(', Nombre)-1)+'('+IntToStr(Num)+')' + Ext;
    end;
    if FileExists(Nombre) then
      TomarNombre(Nombre, Nombre);
  end;
  Nuevo:= Nombre;
end;

Llamada de ejemplo:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('C:\MIARCHIVO.TXT');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  TomarNombre('C:\MIARCHIVO.TXT', s);
  Memo1.Lines.SaveToFile(s);
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 21-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
hola amigo gracias por tu tiempo
aplique el codigo aqui pero no me funciona
Código Delphi [-]
procedure TReg2infConverter.Button2Click(Sender: TObject);
var Origen, Destino,FileName,Path,s: string;
begin
if ExtractFileExt(opendialog1.FileName) = '.reg' then
begin
TomarNombre(opendialog1.FileName, s);
Path:=GetshortName(ExtractFilePath(Opendialog1.FileName));
Filename := Extractfilename(opendialog1.FileName);
Origen := GetshortName(opendialog1.FileName);
Filename:= AnsiReplaceStr(Filename,' ','');
Destino :=ChangeFileExt(Filename, '.inf');
LlamarReg2inf(Handle,'reg2inf.exe',Origen,path+Destino );
end else
MessageDlg('Archivo invalido!', MtError, [mbOK],0);
end;
he probado de diferentes formas pero no me resulta que hago mal??
Responder Con Cita
  #4  
Antiguo 21-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Con respecto a ese código no sé ya que hay muchos factores involucrados que pueden estar provocando el fallo.

Pero para que realizes la prueba, te pongo un procedimiento que llama a la función TomarNombre utilizando un TOpenDialog y realiza correctamente lo que buscabas.
Código Delphi [-]
...
implementation

uses StrUtils;

procedure TomarNombre(Nombre: string; var Nuevo: string);
var
  Num: Integer;
  Ext: string;
begin
  if FileExists(Nombre) then
  begin
    Ext := ExtractFileExt(Nombre);
    Nombre := LeftStr(Nombre, Length(Nombre) - Length(Ext));
    if Pos('(', Nombre) = 0 then
    begin
      Num := 1;
      Nombre := Nombre + '(' + IntToStr(Num) + ')' + Ext;
    end
    else
    begin
      Num := StrToInt(Copy(Nombre, Pos('(', Nombre)+1,
        PosEx(')',Nombre, Pos('(', Nombre))-Pos('(', Nombre)-1));
      Inc(Num);
      Nombre := Copy(Nombre,1,Pos('(', Nombre)-1)+'('+IntToStr(Num)+')' + Ext;
    end;
    if FileExists(Nombre) then
      TomarNombre(Nombre, Nombre);
  end;
  Nuevo:= Nombre;
end;

// codigo de prueba
procedure TForm1.Button1Click(Sender: TObject);
var
  Ori, Des: TMemoryStream;
  i: Integer;
  b: Byte;
  Nombre: string;
begin
  if OpenDialog1.Execute then
  begin
    Ori:= TMemoryStream.Create;
    Des:= TMemoryStream.Create;
    try
      Ori.LoadFromFile(OpenDialog1.FileName);
      TomarNombre(OpenDialog1.FileName, Nombre);
      for i:= 0 to Ori.Size - 1 do
      begin
        Ori.Read(b, 1);
        Des.Write(b, 1)
      end;
      Des.SaveToFile(Nombre)
    finally
      Ori.Free;
      Des.Free
    end;
  end;
end;
end.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 21-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
muchas gracias funciona perfecto!!
Responder Con Cita
  #6  
Antiguo 22-11-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hace varios meses publiqué una función para encontrar un nombre de archivo no repetido y proponer un nuevo nombre como lo hace Windows. La fuente es esta y el código este:

Código Delphi [-]
function FileNameOnCollision(FileName: String): String;
var
  FileExt: String;
  n: integer;
begin
  Result:= FileName;
  FileExt:= ExtractFileExt(FileName);
  SetLength(FileName, Length(FileName) - Length(FileExt));
  n:= 2;
  while FileExists(Result) do
  begin
    Result:= FileName + '(' + IntToStr(n) + ')' + FileExt;
    inc(n);
  end;
end;

Ejemplo de uso:
Código Delphi [-]
  Label1.Caption:= FileNameOnCollision(ExtractFilePath(Application.ExeName) + 'texto.txt');


Saludos.
Responder Con Cita
  #7  
Antiguo 22-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Hace varios meses publiqué una función para encontrar un nombre de archivo no repetido y proponer un nuevo nombre como lo hace Windows. La fuente es esta y el código este:

Código Delphi [-]
function FileNameOnCollision(FileName: String): String;
var
  FileExt: String;
  n: integer;
begin
  Result:= FileName;
  FileExt:= ExtractFileExt(FileName);
  SetLength(FileName, Length(FileName) - Length(FileExt));
  n:= 2;
  while FileExists(Result) do
  begin
    Result:= FileName + '(' + IntToStr(n) + ')' + FileExt;
    inc(n);
  end;
end;

Ejemplo de uso:
Código Delphi [-]
  Label1.Caption:= FileNameOnCollision(ExtractFilePath(Application.ExeName) + 'texto.txt');


Saludos.
Gracias! guardare la fuente!!
Responder Con Cita
  #8  
Antiguo 27-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
estoy usando este codigo
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Ori, Des: TMemoryStream;
  i: Integer;
  b: Byte;
  Nombre: string;
begin
  if OpenDialog1.Execute then
  begin
    Ori:= TMemoryStream.Create;
    Des:= TMemoryStream.Create;
    try
      Ori.LoadFromFile(OpenDialog1.FileName);
      TomarNombre(OpenDialog1.FileName, Nombre);
      for i:= 0 to Ori.Size - 1 do
      begin
        Ori.Read(b, 1);
        Des.Write(b, 1)
      end;
      Des.SaveToFile(Nombre)
    finally
      Ori.Free;
      Des.Free
    end;
la verdad no me habia percatado que el archivo solo copia y le cambia el nombre al de origen no lo procesa como puedo hacer el llamado
Código Delphi [-]
LlamarReg2inf(Handle,'reg2inf.exe',Origen,path+Destino );

gracias!!
Responder Con Cita
  #9  
Antiguo 28-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jonydread Ver Mensaje
como puedo hacer el llamado
Código Delphi [-]
LlamarReg2inf(Handle,'reg2inf.exe',Origen,path+Destino );

gracias!!
Hola.

El llamado tál como lo mostras en esa línea es correcto. Mas o menos he ido siguiendo los pasos de la aplicación que estás realizando en los hilos: 1, 2, 3, 4, 5, 6 y todas las funciones que han ido sugiriendo sobre el tratamiento previo de los parámetros a enviar realizan bién su cometido.

Y creo que la principal dificultad radica en que desconocemos que es reg2inf.exe, que hace y como lo hace. Es decir que se pierde todo control sobre las acciones que se harán sobre los parámetros 'Origen' y 'Destino' una vez enviados mediante ShellExecute a reg2inf.exe...


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-11-2011 a las 02:36:14.
Responder Con Cita
  #10  
Antiguo 28-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Thumbs up

si gracias Disculpa ya lo solucione
y gracias por todo es mi primera vez incursionando delphi asiendo este programa para simplificar el uso su ayuda me ha servido de mucho para aprender y la pagina tambien.
cuando termine les dejo el codigo completo ya que lo diseñe sin saber mucho de estos codigos y me gustaria compartir con alguien que le sirva
aqui esta el reg2inf.exe sirve para realizar tweaks del registro de windows en cd de instalacion.
Saludos ecfisa gracias por tu ayuda.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No consigo renombrar un archivo Paulao Varios 7 05-10-2011 20:19:34
Renombrar archivo mcalmanovici Varios 6 02-01-2008 17:51:00
Archivo DesignEditor.dcu no existe egostar OOP 5 30-12-2007 17:19:25
Comprobar si existe archivo Ken_Masters API de Windows 2 29-07-2007 17:14:19
saber si archivo existe cahosoft API de Windows 2 09-01-2006 11:42:07


La franja horaria es GMT +2. Ahora son las 10:26:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi