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
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 14:30:18.


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