SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: Pyroman en Sábado 23 de Octubre de 2004, 02:12

Título: Error Copiando Directorios
Publicado por: Pyroman en Sábado 23 de Octubre de 2004, 02:12
Holas escribo pq hace tiempo pedi ayuda sobre como copiar un directorio en tiempo de ejecucion y el usuario Viktor amablemente me sugirio usar esta funcion:

Codigo:--------------------------------------------------------------------------------
void __fastcall copiarCarpeta(String sOrigen, String sDestino)
{
   SHFILEOPSTRUCT sfos;

   sfos.hwnd = NULL;
   sfos.wFunc = FO_COPY;
   sfos.pFrom = sOrigen.c_str();
   sfos.pTo = sDestino.c_str();
   sfos.fFlags = FOF_NOCONFIRMMKDIR;
   SHFileOperation(&sfos);
}
--------------------------------------------------------------------------------
Esa funcion la puedes usar de la siguiente manera:

Codigo:--------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
  copiarCarpeta("c:\\Original","e:\\CopiaOriginal");

}

Pues bien, al principio funcionaba bien pero luego empezo a darme errores del tipo "No se puede copiar archivo:no se puede leer del disco o archivo de origen", sin embargo hay veces q si funciona aun mostrando error por pantalla. Si alguien puede ayudarme con mi problema se lo agradeceria muxo. Tambien si alguien sabe de algun manual/tutorial del InstallShield de Builder 5 u otro programa de instalacion  sencillo y freeware, se lo agradeceria aun mas. Mi mail es pyroonline@hotmail.com     Muchas Gracias
Título: Re: Error Copiando Directorios
Publicado por: Pyroman en Sábado 30 de Octubre de 2004, 16:09
Voi a responderme a mi mismo y dejar la solucion que me funciona.
Antes de usar la funcion copiarCarpeta(), hay que hacer una pequeña operacion con el string Origen:
 
  Origen.SetLength(dirOrigen.Length()+1);
  Origen[dirOrigen.Length()]='\0';
  Origen.SetLength(dirOrigen.Length()+1);
  Origen[dirOrigen.Length()]='\0';
  copiarCarpeta(Origen,Destino);

Asi añadiendo esos dos nulos a la cadena funciona perfectamente.
Saludos.
Título: Re: Error Copiando Directorios
Publicado por: _Viktor en Jueves 11 de Noviembre de 2004, 20:10
Código: Text
  1. sPath = IncludeTrailingPathDelimiter(sPath);
  2.  

Eso te agrega el delimitador al final ;)
Saludos!