Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: KZN en 13 Agosto 2016, 13:40 pm



Título: [C] Consulta y eliminación.
Publicado por: KZN en 13 Agosto 2016, 13:40 pm
Necesito acceder a una carpeta que siempre se asigna un valor diferente, solo conserva una parte en concreto ".default"
Código:
chdir (".default");

Estoy buscando la forma de que al acabar el código el archivo generado se elimine pero no lo consigo

Código:
ERASE %0


Título: Re: [C] Consulta y eliminación.
Publicado por: ivancea96 en 13 Agosto 2016, 14:09 pm
Para eliminar, puedes hacer remove(archivo), de la librería stdio.h (cstdio en C++)
http://www.cplusplus.com/reference/cstdio/remove/ (http://www.cplusplus.com/reference/cstdio/remove/)

Con respecto a lo primero, puedes listar los archivos en el directorio hasta encontrarlo.
En Windows, para listar, tienes FindFirstFile y FindNextFile, de windows.h:
FindFirstFile (https://msdn.microsoft.com/es-es/library/windows/desktop/aa364418(v=vs.85).aspx)
FindNextFile (https://msdn.microsoft.com/es-es/library/windows/desktop/aa364428(v=vs.85).aspx)

Al listar, te darán una estructura WIN32_FIND_DATA. Sus campos, los puedes ver aquí:
WIN32_FIND_DATA (https://msdn.microsoft.com/es-es/library/windows/desktop/aa365740(v=vs.85).aspx)
El que te interesa, el nombre, es el campo cFileName.

En la página de FindFirstFile te aparece un ejemplo de cómo usarlo. Pero bueno, aquí un resumen (Las salidas de datos están en C++):
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. char path[] = "C:\\users\\*";
  8. WIN32_FIND_DATA wf;
  9. HANDLE handle = FindFirstFile(path, &wf);
  10. if(handle != INVALID_HANDLE_VALUE){
  11. do{
  12. if(strcmp(wf.cFileName, ".")!=0 && strcmp(wf.cFileName, "..")!=0){
  13.  
  14. // Aqui tendrás la estructura con los datos del archivo actual
  15. cout << wf.cFileName << endl;
  16.  
  17. }
  18. }while( FindNextFile(handle,&wf) );
  19. FindClose(handle);
  20. }else{
  21. cout << "No se pudo abrir la carpeta" << endl;
  22. }
  23. }

Importante que a FindFirstFile, el path que le pasas termine en "\\*" (o "/*"), sinó solo "enumerará" la propia carpeta.


Título: Re: [C] Consulta y eliminación.
Publicado por: KZN en 20 Agosto 2016, 03:19 am
Lo que necesito no es eliminar un archivo, necesito remover el programa que estoy generando al finalizarlo.


Título: Re: [C] Consulta y eliminación.
Publicado por: ivancea96 en 20 Agosto 2016, 03:40 am
En ese caso, puedes crear con el programa un batch que se encargue de borrar el programa (y luego a si mismo), y llamarlo con "system("start archivo.bat");"


Título: Re: [C] Consulta y eliminación.
Publicado por: mester en 20 Agosto 2016, 12:51 pm
Lo que necesito no es eliminar un archivo, necesito remover el programa que estoy generando al finalizarlo.

Citar
En ese caso, puedes crear con el programa un batch que se encargue de borrar el programa (y luego a si mismo), y llamarlo con "system("start archivo.bat");"

O lo que puedes hacer es moverlo a la carpeta temporal del sistema.


Título: Re: [C] Consulta y eliminación.
Publicado por: KZN en 22 Agosto 2016, 19:40 pm
¿Por código como hago que el programa generado en C independientemente de la ruta de iniciación se mueva a la carpeta temporal? Eso me ayudaría bastante para cerrar tema


Título: Re: [C] Consulta y eliminación.
Publicado por: mester en 24 Agosto 2016, 14:26 pm
¿Por código como hago que el programa generado en C independientemente de la ruta de iniciación se mueva a la carpeta temporal? Eso me ayudaría bastante para cerrar tema
Código
  1. int main () {
  2.  char *proName = (char *)(calloc (1025, sizeof (char)));
  3.  
  4.  GetModuleFileName ( GetModuleHandle (NULL), proName, 1024);
  5.  
  6.  return !MoveFile (proName, "(carpeta temporal de windows)");
  7. }