Domanda Risolto Problema apertura file

giovy2707

Utente Electrum
27 Giugno 2019
96
38
62
103
Penso questo sia l'ultimo problema (spero...)

In breve:

ho questa funzione che mi calcola il nome del file su cui scrivere:

C:
void controllaData(char * today) {

    static const char *weekday[] = {"domenica",  "lunedì",  "martedì", "mercoledì", "giovedì", "venerdì", "sabato"};
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);
    sprintf(today,"../../../Produttività 🎯/Pianificazione giornata/%s - %02d/%02d/%04d.md", weekday[tm.tm_wday], tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900);
}

e nel main apro il file in questo modo:

C:
char today[30];
controllaData(today);

if((fileWT = fopen(today,"w")) == NULL) //controllo file destinazione
{
    fprintf(log,"file problem! (error opening destination file) %s",today);
    fclose(fp); //altro file che mi serve per altro
    fclose(log); //altro file che mi serve per altro
    exit(-1);
}

Ora il problema è che l'output è corretto: ../../../Produttività 🎯/Pianificazione giornata/venerdì - 28/10/2022.md ma per qualche motivo la fopen non me lo apre... Forse il problema è l'emoji? Anche se non penso visto che con un altro file andava senza problemi.
 
Ci sono diversi problemi, il primo è che today può contenere 30 caratteri, ma solo la format string ancora da espandere è lunga 70, quindi è ovvio che non entrerà mai ed andrà in overflow causando ogni sorta di problema. Devi ingrandire today o cambiare metodo con cui la ottieni. Un altro problema potrebbe essere la cwd: usando un percorso relativo come quello è facile sbagliarsi se si chiama il programma da un'altra posizione, a quel punto potrebbe puntare a una cartella che non esiste o dove non ha il permesso di scrivere e fallire. Infine l'emoji su Windows creerebbe problemi inserita così, su linux se hai impostato il charset a UTF8 dovrebbe andare, comunque non è il top vedere emoji hardcoded quando si legge un codice.
 
Ci sono diversi problemi, il primo è che today può contenere 30 caratteri, ma solo la format string ancora da espandere è lunga 70, quindi è ovvio che non entrerà mai ed andrà in overflow causando ogni sorta di problema. Devi ingrandire today o cambiare metodo con cui la ottieni.
Cavolo non ci avevo fatto caso :asd:...
Infine l'emoji su Windows creerebbe problemi inserita così, su linux se hai impostato il charset a UTF8 dovrebbe andare, comunque non è il top vedere emoji hardcoded quando si legge un codice.
Uso linux quindi non penso ci siano problemi, per quanto riguarda le emoji ci sono perchè le uso su obsidian nei nomi delle cartelle,per questo motivo per ho dovuto inserirle anche nel codice altrimenti il percorso non era corretto, infatti questo programmino lo sto scrivendo per automatizzare le task list su Obsidian.