es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo crear un directorio y hacer un archivo en la ruta %appdata% de Windows en el lenguaje C?

Logré crear satisfactoriamente un directorio o carpeta y también pude crear un archivo en ese directorio, pero ¿cómo puedo crear un directorio y un archivo en la carpeta de appdata local del usuario si no sé cuál es su nombre de usuario o el nombre de su carpeta de usuario? ¡Gracias!

Usé codeblocks

“`
#include <sys stat.h="">
#include <sys types.h="">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
int check;
char* dirname = "C:/Pyromagne";

<pre><code>check = mkdir(dirname);

FILE* fp;

fp = fopen("C:/Pyromagne/test.pyr", "w+");
fputs("Pyromagne\n", fp);
fputs("qwertyuiop", fp);
fclose(fp);

FILE* ffpp;
char user[25];
char pass[25];
char uuser[25];

ffpp = fopen("C:/Pyromagne/test.pyr", "r");

strcpy(uuser, fgets(user, 255, (FILE*)ffpp));
printf("%s\n", uuser);

strcpy(uuser, fgets(user, 255, (FILE*)ffpp));
printf("%s\n", uuser);

fclose(ffpp);
</code></pre>

}
“`</string.h></stdlib.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear un directorio y un archivo en la carpeta local de AppData del usuario (asumiendo que el sistema operativo es Windows), puedes utilizar la función SHGetFolderPathA de WinAPI para obtener la ruta de la carpeta local de AppData y luego crear el directorio y archivo en esa ruta.

    Aquí tienes un código que puedes agregar al código existente para lograr esto:

    #include <shlobj.h> // para SHGetFolderPathA
    
    void main()
    {
        int check;
        char* dirname = "C:/Pyromagne";
    
        // obtener la ruta de la carpeta local de AppData
        char path[MAX_PATH];
        SHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, path);
    
        // crear el directorio Pyromagne en la carpeta local de AppData
        strcat(path, "\\Pyromagne");
        check = mkdir(path);
    
        // crear el archivo test.pyr en el directorio Pyromagne
        FILE* fp;
        strcat(path, "\\test.pyr");
        fp= fopen(path, "w+");
        fputs("Pyromagne\n", fp);
        fputs("qwertyuiop", fp);
        fclose(fp);
    
        // leer e imprimir el contenido del archivo test.pyr
        FILE* ffpp;
        char user[25];
        char pass[25];
        char uuser[25];
    
        ffpp = fopen(path, "r");
    
        strcpy(uuser, fgets(user, 255, (FILE*)ffpp));
        printf("%s\n", uuser);
    
        strcpy(uuser, fgets(user, 255, (FILE*)ffpp));
        printf("%s\n", uuser);
    
        fclose(ffpp);
    }
    

    Nota que necesitas incluir el archivo de encabezado shlobj.h para SHGetFolderPathA, y también necesitas enlazar con la biblioteca shell32 agregando -lshell32 a las opciones del vinculador en CodeBlocks.</shlobj.h>

Comments are closed.