Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-11-2009
yelian yelian is offline
No confirmado
 
Registrado: Nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Exclamation Ayuda a Pasar Codigo Delphi a C++

Hola a Todos;
Como estan hacia rato no pasaba por aqui a dejar algunas de mi dudas pero bueno ya me ven aquí, espero que me puedan ayudar, como siempre lo han echo.

Bueno mi duda ahora es como pudiera llevar este código de Delphi a C++, es para eliminar una carpeta con todo su contenido, el código lo e sacado de este mismo foros pero no e podido llevarlo a C++,

Código Delphi [-]uses
ShellApi;

procedure DeleteFolder(Folder: String);
var
FileOpInfo: TShFileOpStruct;

begin
FillChar(FileOpInfo, SizeOf(FileOpInfo), 0);
FileOpInfo.wFunc := FO_DELETE;
FileOpInfo.pFrom := PChar(Folder);
FileOpInfo.fFlags := FOF_NOCONFIRMATION;

ShFileOperation(FileOpInfo);
end;


Mi mayor problema es donde pongo en el C++ el "ShellApi"
No se si sera por que no pongo bien el "ShellApi" pero me da error en "FillChar";

Gracias y Saludos...
Responder Con Cita
  #2  
Antiguo 23-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: Nov 2007
Posts: 1.939
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
Código:
#include <shellapi.h>


DeleteFolder(String Folder)
{
   SHFILEOPSTRUCT FileOpInfo;
   setmem(&FileOpInfo, sizeof(FileOpInfo), 0);
   FileOpInfo.wFunc = FO_DELETE;
   FileOpInfo.pFrom = Folder.c_str();
   FileOpInfo.fFlags = FOF_NOCONFIRMATION;

   SHFileOperation(&FileOpInfo);
}
Saludos.
Responder Con Cita
  #3  
Antiguo 23-11-2009
yelian yelian is offline
No confirmado
 
Registrado: Nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Thumbs up

Muchísimas gracias escafandra,

Como siempre de muchísima ayuda para este foros,

Bueno tengo otra duda por preguntar, presida a esta pero no la pongo todavía por que estoy buscando por las paginas que tengo acceso a ver si la puedo solucionar, sino puedo encontrar la respuesta la pongo aquí, para ver si me pueden ayudar como siempre lo hacen,
No la pongo ahora por que no me gusta postear algo que no e buscado antes, pregunto las dudas ya cuando no tengo mas Acternativas de búsqueda.

Bueno Muchísimas Gracias y Saludos a Todos...
Responder Con Cita
  #4  
Antiguo 24-11-2009
yelian yelian is offline
No confirmado
 
Registrado: Nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Exclamation

Hola a todos de nuevo ya esroy a qui de nuevo,
Comos les había contado antes tengo otra duda con otro código,
Pero el de ahora no es problema con el código sino a la hora de llamar a la función.

El código es el siguiente, creo que lo saque de este mismo foros...


void DirList(String sPath, TStrings* strings)
{
TSearchRec sr;
sPath = IncludeTrailingPathDelimiter(sPath);
bool hecho = FindFirst(sPath + "*.*", faAnyFile, sr);
while (!hecho)
{
if ((sr.Attr & faDirectory) && sr.Name != "." && sr.Name != "..")
{
strings->Append(sPath + sr.Name);
DirList(sPath + sr.Name, strings);
}
hecho = FindNext(sr);
}
FindClose(sr);
}


No se si lo estoy llamado de forma correcta o el codigo tiene algún problema,

Llamo a la función así

DirList("C:\\prueba\\*", ) ;

Pero no se que voy a poner como segundo parametro de la función,

Bueno les explico un poco mas de lo que quiero hacer,

Mi idea es hacer un Servicio que cada vez que se ejecute me limpie una carpeta (me borre todo el contenido dentro de ella), pero quisiera darles algunas exclusiones , por que una de las carpetas las cual quiero Limpiar es
"Documents and Settings", pero no quiero borrar todas sus carpetas por que saben que hay varias carpetas que no se pueden borrar de hay,

Bueno Saludos y Gracias a todos...
Responder Con Cita
  #5  
Antiguo 24-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: Nov 2007
Posts: 1.939
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
Código:
void DirList(String Dir, TStrings* Salida)
{
    TSearchRec sr;
    if(!FindFirst(Dir + "\\*.*", faAnyFile, sr))
    do{
       if(sr.Name != "." && sr.Name != ".."){
          if(sr.Attr & faDirectory)
             DirList(Dir + "\\" + sr.Name, Salida);
          else
             Salida->Add(Dir + "\\" + sr.Name);
       }
    } while (!FindNext(sr));
    FindClose(sr);
}
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   DirList("C:\\Archivos de programa", ListBox1->Items);
}
Saludos.
Responder Con Cita
  #6  
Antiguo 24-11-2009
yelian yelian is offline
No confirmado
 
Registrado: Nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Exclamation

Gracias por la Ayuda escafandra

Pero el código me detecta todos los ficheros aunque estén dentro de otro subdirectorio pero no me muestra las carpetas que son las que quiero excluir algunas,
Responder Con Cita
  #7  
Antiguo 24-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: Nov 2007
Posts: 1.939
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
Código:
void Folders(String Dir, TStrings* Salida)
{
    TSearchRec sr;
    if(!FindFirst(Dir + "\\*.*", faAnyFile, sr))
    do{
      Salida->Add(Dir + "\\" + sr.Name);
    } while (!FindNext(sr));
    FindClose(sr);
}
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Folders("C:\\Documents and Settings", Memo1->Lines);
}
Saludos.
Responder Con Cita
  #8  
Antiguo 24-11-2009
yelian yelian is offline
No confirmado
 
Registrado: Nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Gracias escafandra;

El código me funciona bien pero me saca unas carpetas con puntos que no se que son y no existen, te muestro lo que sale en el Memo

--------------------------------------
C:\Documents and Settings\.
C:\Documents and Settings\..
C:\Documents and Settings\Administrador
C:\Documents and Settings\Administrador.IPIMTZAG
C:\Documents and Settings\All Users
C:\Documents and Settings\amartinez
C:\Documents and Settings\Default User
C:\Documents and Settings\LocalService
C:\Documents and Settings\NetworkService
C:\Documents and Settings\yrodriguez

-----------------------------------------------------

Las dos primeras no se que son, como se pudieran quitar y también como pudiera darles las exclusiones que yo quisiera.

Yo lo que trato de hacer es paserle esta lista a la función de eliminar Carpetas completas

Muchas gracias por la ayuda brindada
Responder Con Cita
  #9  
Antiguo 24-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: Nov 2007
Posts: 1.939
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
Viene desde la época del DOS:
\. es la carpeta actual
\.. es la carpeta anterior (padre)

Saludos.
Responder Con Cita
  #10  
Antiguo 26-11-2009
yelian yelian is offline
No confirmado
 
Registrado: Nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Thumbs up

Muchas Gracias escafandra como siempre.

Bueno para el que a ya tenido el mismo problema que yo y no sepa como borrar todo los subdirectorios de una carpeta incluyendo los archivos, aqui les dejo el código que e utilizado para el mismo.

Primero que nada debemos de declarar estas dos funciones.



Codigo Funcion1
//--------------------------------------------------------

void __fastcall TForm1:eleteFolder(String Folder)
{
SHFILEOPSTRUCT FileOpInfo;
setmem(&FileOpInfo, sizeof(FileOpInfo), 0);
FileOpInfo.wFunc = FO_DELETE;
FileOpInfo.pFrom = Folder.c_str();
FileOpInfo.fFlags = FOF_NOCONFIRMATION;
SHFileOperation(&FileOpInfo);
}

//-----------------------------------------------------

Codigo Funcion2
//--------------------------------------------------------

void __fastcall TForm1::ListarEliminarFolders(String Dir, TStrings* Salida)
{
TSearchRec sr;
if(!FindFirst(Dir + "\\*.*", faAnyFile, sr))
do{
Salida->Add(Dir + "\\" + sr.Name);
if (sr.Name=="." || sr.Name=="..") NULL;
else DeleteFolder(Dir + "\\" + sr.Name);
} while (!FindNext(sr));
FindClose(sr);
}

//---------------------------------------------------------

-En la primera Funcion es para eliminar la carpeta completa que se le pase,

-En la Segunda Función es para listar todos los Archivos y Carpetas dentro de un directorio y Eliminarlos con la Primera Función Declarada,

Le puse un IF para que cuando mande a borrar la lista de Archivos y Carpetas encontrados no me de Error a la hora de borrar estos dos "." y "..", que como escafandra me decía viene de la época del DOS.

Bueno y Como ultimo como se Llama a la Función para eliminar todo el contenido dentro de una Carpeta dejándola a ella intacta.

Código Acción

//------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListarEliminarFolders("C:\\Documents and Settings", Memo1->Lines);
}

Se inserta un Memo1 para ver todos los archivos con las carpeta que existian en el Directorio seleccionado "C:\Documents and Settings".


Bueno cuando encuentre como pudiera ponerles mas carpetas a Excluir lo pasteo, para como ya dije le sirva a alguien que tenga la misma duda que yo, los archivos a Excluir deben de estar en un Fichero aparte...


Bueno Saludos y Muchas gracias a todos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ayuda con onexion a sql server 2000 con ado por codigo desde delphi 6 FAGD Conexión con bases de datos 2 26-02-2008 18:24:08
Porfavor algo de ayuda con un poco de codigo en delphi!! N4ota Varios 6 10-06-2007 23:40:54
Ayuda para completar código:Traducción de Delphi a Builder Pernorak C++ Builder 3 30-05-2007 13:45:16
Pasar codigo C a delphi Mr.Vaka Varios 1 24-12-2005 12:38:02
Pasar Código VBSCRIPT a Delphi.net mamen .NET 2 03-06-2005 15:52:43


La franja horaria es GMT +2. Ahora son las 18:05:05.


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