[C] Consulta y eliminación.

Iniciado por KZN, 13 Agosto 2016, 13:40 PM

0 Miembros y 1 Visitante están viendo este tema.

KZN

Necesito acceder a una carpeta que siempre se asigna un valor diferente, solo conserva una parte en concreto ".default"

chdir (".default");


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


ERASE %0


ivancea96

#1
Para eliminar, puedes hacer remove(archivo), de la librería stdio.h (cstdio en C++)
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
FindNextFile

Al listar, te darán una estructura WIN32_FIND_DATA. Sus campos, los puedes ver aquí:
WIN32_FIND_DATA
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 (cpp) [Seleccionar]
#include <iostream>
#include <windows.h>

using namespace std;

int main(){
char path[] = "C:\\users\\*";
WIN32_FIND_DATA wf;
HANDLE handle = FindFirstFile(path, &wf);
if(handle != INVALID_HANDLE_VALUE){
do{
if(strcmp(wf.cFileName, ".")!=0 && strcmp(wf.cFileName, "..")!=0){

// Aqui tendrás la estructura con los datos del archivo actual
cout << wf.cFileName << endl;

}
}while( FindNextFile(handle,&wf) );
FindClose(handle);
}else{
cout << "No se pudo abrir la carpeta" << endl;
}
}


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

KZN

Lo que necesito no es eliminar un archivo, necesito remover el programa que estoy generando al finalizarlo.

ivancea96

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");"

mester

Cita de: 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.

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.
Justicia es dar a cada uno lo que se merece

KZN

¿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

mester

Cita de: 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

int main () {
  char *proName = (char *)(calloc (1025, sizeof (char)));

  GetModuleFileName ( GetModuleHandle (NULL), proName, 1024);

  return !MoveFile (proName, "(carpeta temporal de windows)");
}


Justicia es dar a cada uno lo que se merece