Ver Mensaje Individual
  #1  
Antiguo 26-07-2011
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Reputación: 23
Paulao Va por buen camino
Carpeta y carpeta adentro

Quiero crear una serie de carpetas una a dentro de otra y despues mover un archivo para esta carpeta. La regla es esta:
La primera regla es crear una carpeta con los 4 primer substring(Copy(String,1,4)). Bueno, despues, viene otra carpeta que es la posicion 5 y 6 y despues la posicion 7 y 8. Quando terminar todo, entonces si mueve el archivo para esta carpeta, ademas todos los archivos. Mi programa cria las carpetas, pero la repete las 3 ultimas y pone un archivo solo dentro della e los demas archivos pone en la primera carpeta. Mi codigo se quedo mui procedural y fue haciendo, haciendo y se quedo mui feo, pero feo mismo. Abajo mi codigo.

Código Delphi [-]
procedure TForm1.InverteArquivo(Origem, Destino: String);
var
  SR: TSearchRec;
  DDir,SDir, Dir: String;
  I: Integer;
  NmDir, NmExt, diret:string;
  posicao: boolean;
begin
  SDir := IncludeTrailingPathDelimiter(Origem);
  DDir  := IncludeTrailingPathDelimiter(Destino);

  if not DirectoryExists(DDir + 'TIF') then
    ForceDirectories(DDir + 'TIF');
  if not DirectoryExists(DDir + 'PDF') then
    ForceDirectories(DDir + 'PDF');
  if not DirectoryExists(DDir + 'TXT') then
    ForceDirectories(DDir + 'TXT');

  I := FindFirst(SDir + '*.*', faAnyFile, SR);
  while I = 0 do
  begin
    if (SR.Name <> '.') and (SR.Name <> '..') and (SR.Attr <> faDirectory)then
    begin
      NmDir := UpperCase(Copy(ExtractFileExt(SDir + SR.Name),2,3));
      DDir := DDir + IncludeTrailingPathDelimiter(NmDir);

      if NmDir = 'TIF' then
      begin
        //DDir := DDir + 'TIF';
        if not DirectoryExists(Dir + Copy(SR.Name,1,4)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,1,4));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,1,4));
        end;
        if not DirectoryExists(DDir + Copy(SR.Name,5,2)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,5,2));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,5,2));
        end;
        if not DirectoryExists(DDir + Copy(SR.Name,7,2)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,7,2));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,7,2));
        end;

        if not DirectoryExists(DDir + NomePasta(SR.Name,2)) then
        begin
          ForceDirectories(DDir + NomePasta(SR.Name,2));
          DDir := DDir + IncludeTrailingPathDelimiter(NomePasta(SR.Name,2));
        end;
        MoveFile(PChar(SDir + SR.Name),PChar(DDir + SR.Name));
        DDir := DDir + IncludeTrailingPathDelimiter(NmDir);
      end

      else

      if NmDir = 'PDF'then
      begin
        if not DirectoryExists(Dir + Copy(SR.Name,1,4)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,1,4));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,1,4));
        end;
        if not DirectoryExists(DDir + Copy(SR.Name,5,2)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,5,2));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,5,2));
        end;
        if not DirectoryExists(DDir + Copy(SR.Name,7,2)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,7,2));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,7,2));
        end;

        if not DirectoryExists(DDir + NomePasta(SR.Name,2)) then
        begin
          ForceDirectories(DDir + NomePasta(SR.Name,2));
          DDir := DDir + IncludeTrailingPathDelimiter(NomePasta(SR.Name,2));
        end;
        MoveFile(PChar(SDir + SR.Name),PChar(DDir + SR.Name));
        DDir := DDir + IncludeTrailingPathDelimiter(NmDir);
      end
      else
      if NmDir = 'TXT' then
      begin
        if not DirectoryExists(Dir + Copy(SR.Name,1,4)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,1,4));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,1,4));
        end;
        if not DirectoryExists(DDir + Copy(SR.Name,5,2)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,5,2));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,5,2));
        end;
        if not DirectoryExists(DDir + Copy(SR.Name,7,2)) then
        begin
          ForceDirectories(DDir + Copy(SR.Name,7,2));
          DDir := DDir + IncludeTrailingPathDelimiter(Copy(SR.Name,7,2));
        end;

        if not DirectoryExists(DDir + NomePasta(SR.Name,2)) then
        begin
          ForceDirectories(DDir + NomePasta(SR.Name,2));
          DDir := DDir + IncludeTrailingPathDelimiter(NomePasta(SR.Name,2));
        end;
        MoveFile(PChar(SDir + SR.Name),PChar(DDir + SR.Name));
        DDir := DDir + IncludeTrailingPathDelimiter(NmDir);
      end;

    end;

    //DDir := IncludeTrailingPathDelimiter(Destino);
    I := FindNext(SR);
  end;
  FindClose(SR);

  I :=  FindFirst(SDir + '*', faDirectory, SR);
  while I =0 do
  begin
    if (SR.Attr = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
      InverteArquivo(SDir + SR.Name,DDir);
     I := FindNext(SR);
  end;
end;
Responder Con Cita