Fopen_s() fallisce in scrittura e append, errno 13

di il
20 risposte

Fopen_s() fallisce in scrittura e append, errno 13

Ciao a tutti,
sto imparando un po' di C e sto cercando di capire la gestione dei file...

ho creato una rubrica che salvi i contatti in un file, fin qui tutto bene.

la prima versione che ho fatto caricava all'apertura tutti contatti e li storava tutti insieme alla chiusura.
ora sto provando a gestire dinamicamente il file durante l'utilizzo della rubrica.

ho quindi creato la function void AddContact() che dopo aver inserito il contatto lo stori nel file.

il problema è che se eseguo AddContact() senza eseguire LoadAddressBook() funziona correttamente, se invece eseguo prima LoadAddressBook() (come dev'essere) la fopen_s() fallisce dicendomi che non ho i permessi necessari (errno 13).

questa è la function LoadAddressBook():
void LoadAddressBook()
{
    contactStructType* curContact = (contactStructType*)malloc(sizeof(contactStructType));
    memset(curContact, 0, sizeof(contactStructType));

    char name[30];
    char surname[30];
    char number[30];
    int i = 0;

    FILE* file;

    fopen_s(&file, "./addressBook.list", "rb");
    fread(curContact, sizeof(contactStructType), 1, file);
    while (!feof(file))
    {
        strcpy_s(name, curContact->name);
        strcpy_s(surname, curContact->surname);
        strcpy_s(number, curContact->number);

        fread(curContact, sizeof(contactStructType), 1, file);

        LoadContact(name, surname, number);
    }
        fclose(file);   //va a buon fine restituendo 0
}
mentre questa è la AddContact():
void AddContact(char insName[30], char insSurname[30], char insNumber[30])
{
    contactStructType* curContact = contact;
    contactStructType* newContact = (contactStructType*)malloc(sizeof(contactStructType));
    memset(newContact, 0, sizeof(contactStructType));
    while (curContact->next != NULL)
    {
        curContact = curContact->next;
    }
    idCount++;
    curContact->next = newContact;
    newContact->prev = curContact;
    newContact->id = idCount;
    strcpy_s(newContact->name, insName);
    strcpy_s(newContact->surname, insSurname);
    strcpy_s(newContact->number, insNumber);
    
    FILE* file;

    fopen_s(&file, "./addressBook.list", "ab");
    fwrite(newContact, sizeof(contactStructType), 1, file);
    fclose(file);
}
allego anche tutto il listato:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <conio.h>
#include <locale.h>

typedef struct contactStruct
{
    int id;
    char name[30];
    char surname[30];
    char number[30];
    contactStruct* next;
    contactStruct* prev;
}contactStructType;


contactStructType* contact = NULL;
static int idCount = 0;

void BoldRed()
{
    printf("\033[1;31m");
}
void Red()
{
    printf("\033[0;31m");
}
void BoldGreen()
{
    printf_s("\033[1;32m");
}
void Green()
{
    printf_s("\033[0;32m");
}
void BoldYellow()
{
    printf_s("\033[1;33m");
}
void Yellow()
{
    printf_s("\033[0;33m");
}
void BoldBlue()
{
    printf_s("\033[1;34m");
}
void Blue()
{
    printf_s("\033[0;34m");
}
void BoldMagenta()
{
    printf_s("\033[1;35m");
}
void Magenta()
{
    printf_s("\033[0;36m");
}
void BoldCyan()
{
    printf_s("\033[1;36m");
}
void Cyan()
{
    printf_s("\033[0;36m");
}
void ResetColor()
{
    printf_s("\033[0m");
}

void Intestation()
{
    BoldCyan();
    printf_s("\n--------------------------------------------------------------------------------------------------------\n");
    BoldGreen();
    printf_s("\t\t\t\t\t   --- Rubrica 1.0 ---");
    BoldCyan();
    printf_s("\n--------------------------------------------------------------------------------------------------------\n\n\n");
    ResetColor();
}


void LoadContact(char insName[30], char insSurname[30], char insNumber[30])
{
    contactStructType* curContact = contact;
    contactStructType* newContact = (contactStructType*)malloc(sizeof(contactStructType));
    memset(newContact, 0, sizeof(contactStructType));
    while (curContact->next != NULL)
    {
        curContact = curContact->next;
    }
    idCount++;
    curContact->next = newContact;
    newContact->prev = curContact;
    newContact->id = idCount;
    strcpy_s(newContact->name, insName);
    strcpy_s(newContact->surname, insSurname);
    strcpy_s(newContact->number, insNumber);

    
}
void AddContact(char insName[30], char insSurname[30], char insNumber[30])
{
    contactStructType* curContact = contact;
    contactStructType* newContact = (contactStructType*)malloc(sizeof(contactStructType));
    memset(newContact, 0, sizeof(contactStructType));
    while (curContact->next != NULL)
    {
        curContact = curContact->next;
    }
    idCount++;
    curContact->next = newContact;
    newContact->prev = curContact;
    newContact->id = idCount;
    strcpy_s(newContact->name, insName);
    strcpy_s(newContact->surname, insSurname);
    strcpy_s(newContact->number, insNumber);
    
    FILE* file;

    fopen_s(&file, "./addressBook.list", "ab");
    fwrite(newContact, sizeof(contactStructType), 1, file);
    fclose(file);
}

void FillContact()
{
    char insName[30];
    char insSurname[30];
    char insNumber[30];

    Intestation();
    BoldMagenta();
    printf_s("\n--------------------------------------------------------------------------------------------------------");
    Cyan();
    printf_s("\n\t\t\t\t\t --- nuovo contatto ---");
    BoldMagenta();
    printf_s("\n--------------------------------------------------------------------------------------------------------\n");
    BoldCyan();
    printf_s("\n\tinserisci il nome \t\t-->\t\t");
    scanf_s("\t%s", insName, sizeof(insName));
    printf_s("\n\tinserisci il cognome \t\t-->\t\t");
    scanf_s("%s", insSurname, sizeof(insSurname));
    printf_s("\n\tinserisci il numero di telefono -->\t\t");
    scanf_s("%s", insNumber, sizeof(insNumber));
    BoldMagenta();
    printf_s("--------------------------------------------------------------------------------------------------------");
    ResetColor();

    AddContact(insName, insSurname, insNumber);
    system("cls");
    Intestation();

    contactStructType* curContact = contact->next;
    contactStructType* newContact = (contactStructType*)malloc(sizeof(contactStructType));
    memset(newContact, 0, sizeof(contactStructType));

    while (curContact->next != NULL)
    {
        curContact = curContact->next;
    }

    newContact = curContact;
    BoldMagenta();
    printf_s("\n--------------------------------------------------------------------------------------------------------");
    Yellow();
    printf_s("\n\tnuovo contatto aggiunto alla rubrica:\t%d)\t%s %s --> %s", newContact->id, newContact->name, newContact->surname, newContact->number);
    BoldMagenta();
    printf_s("\n--------------------------------------------------------------------------------------------------------");
    ResetColor();
}

void LoadAddressBook()
{
    contactStructType* curContact = (contactStructType*)malloc(sizeof(contactStructType));
    memset(curContact, 0, sizeof(contactStructType));

    char name[30];
    char surname[30];
    char number[30];
    int i = 0;

    FILE* file;

    fopen_s(&file, "./addressBook.list", "rb");
    fread(curContact, sizeof(contactStructType), 1, file);
    while (!feof(file))
    {
        strcpy_s(name, curContact->name);
        strcpy_s(surname, curContact->surname);
        strcpy_s(number, curContact->number);

        fread(curContact, sizeof(contactStructType), 1, file);

        LoadContact(name, surname, number);
    }
        fclose(file);   //va a buon fine restituendo 0
}

void InitializeAddressBook()
{
    contact = (contactStructType*)malloc(sizeof(contactStructType));
    memset(contact, 0, sizeof(contactStructType));
    LoadAddressBook();
}

int CountContact()
{
    int counter = 0;
    contactStructType* contactCounter = contact;
    while (contactCounter->next != NULL)
    {
        contactCounter = contactCounter->next;
        counter++;
    }
    return counter;
}

contactStructType* CheckSearchByNameNull(char name[30])
{
    contactStructType* srchdContact = contact->next;
    while (srchdContact != NULL)
    {
        if (strcmp(srchdContact->name, name) == 0)
        {
            return srchdContact;
        }
        srchdContact = srchdContact->next;
    }
    return NULL;
}
contactStructType* CheckSearchBySurnameNull(char surname[30])
{
    contactStructType* srchdContact = contact->next;
    while (srchdContact != NULL)
    {
        if (strcmp(srchdContact->surname, surname) == 0)
        {
            return srchdContact;
        }
        srchdContact = srchdContact->next;
    }
    return NULL;
}
contactStructType* CheckSearchByNumberNull(char number[30])
{
    contactStructType* srchdContact = contact->next;
    while (srchdContact != NULL)
    {
        if (strcmp(srchdContact->number, number) == 0)
        {
            return srchdContact;
        }
        srchdContact = srchdContact->next;
    }
    return NULL;
}

void SearchByName(char name[30])
{
    if (contact->next == NULL)
    {
        system("cls");
        Intestation();
        BoldRed();
        printf_s("\n--------------------------------------------------------------------------------------------------------");
        printf_s("\n\t\t\t\t--- nessun contatto da cercare ---");
        printf_s("\n--------------------------------------------------------------------------------------------------------\n\n\n");
        ResetColor();
    }
    else
    {
        contactStructType* srchdContact = contact;

        if (CheckSearchByNameNull(name) == NULL) //perchè non posso mettere != NULL ? ?
        {
            system("cls");
            Intestation();
            BoldRed();
            printf_s("\n--------------------------------------------------------------------------------------------------------");
            printf_s("\n\t\t\t   --- nessun contatto corrispondente al nome %s ---", name);
            printf_s("\n--------------------------------------------------------------------------------------------------------\n\n\n");
            ResetColor();
        }

        else
        {
            system("cls");
            Intestation();
            for (int i = 1; i <= idCount; i++)
            {
                while (srchdContact != NULL)
                {
                    if (strcmp(srchdContact->name, name) == 0)
                    {
                        ResetColor();
                        printf_s("\n\t%d)\t%s %s\t\t-->\t\t%s", srchdContact->id, srchdContact->name, srchdContact->surname, srchdContact->number);
                    }
                    srchdContact = srchdContact->next;
                }
            }
            printf_s("\n");
        }
    }
}
void SearchBySurname(char surname[30])
{
    if (contact->next == NULL)
    {
        system("cls");
        Intestation();
        BoldRed();
        printf_s("\n--------------------------------------------------------------------------------------------------------");
        printf_s("\n\t\t\t\t--- nessun contatto da cercare ---");
        printf_s("\n--------------------------------------------------------------------------------------------------------\n\n\n");
        ResetColor();
    }
    else
    {
        contactStructType* srchdContact = contact->next;

        if (CheckSearchBySurnameNull(surname) == NULL) //perchè non posso mettere != NULL ? ?
        {
            system("cls");
            Intestation();
            BoldRed();
            printf_s("\n--------------------------------------------------------------------------------------------------------");
            printf_s("\n\t\t\t   --- nessun contatto corrispondente al cognome %s ---", surname);
            printf_s("\n--------------------------------------------------------------------------------------------------------\n\n\n");
            ResetColor();
        }
        else
        {
            system("cls");
            Intestation();
            for (int i = 1; i <= idCount; i++)
            {
                while (srchdContact != NULL)
                {
                    if (strcmp(srchdContact->surname, surname) == 0)
                    {
                        ResetColor();
                        printf_s("\n\t%d)\t%s %s\t\t-->\t\t%s", srchdContact->id, srchdContact->name, srchdContact->surname, srchdContact->number);
                    }
                    srchdContact = srchdContact->next;
                }
            }
            printf_s("\n");
        }
    }
}
void SearchByNumber(char number[30])
{
    if (contact->next == NULL)
    {
        BoldRed();
        printf_s("\n--------------------------------------------------------------------------------------------------------");
        printf_s("\n\t\t\t\t--- nessun contatto da cercare ---");
        printf_s("\n--------------------------------------------------------------------------------------------------------\n\n\n");
        ResetColor();
    }
    else
    {
        contactStructType* srchdContact = contact->next;

        if (CheckSearchByNumberNull(number) == NULL)
        {
            system("cls");
            Intestation();
            BoldRed();
            printf_s("\n--------------------------------------------------------------------------------------------------------");
            printf_s("\n\t\t\t   --- nessun contatto corrispondente al numero %s ---", number);
            printf_s("\n--------------------------------------------------------------------------------------------------------\n\n\n");
            ResetColor();
        }
        else
        {
            system("cls");
            Intestation();
            for (int i = 1; i <= idCount; i++)
            {
                while (srchdContact != NULL)
                {
                    if (strcmp(srchdContact->number, number) == 0)
                    {
                        ResetColor();
                        printf_s("\n\t%d)\t%s %s\t\t-->\t\t%s", srchdContact->id, srchdContact->name, srchdContact->surname, srchdContact->number);
                    }
                    srchdContact = srchdContact->next;
                }
            }
            printf_s("\n");
        }
    }
}

void DelContact(int id)
{
    if (id == idCount)
    {
        contactStructType* toDel = contact;

        while (toDel->id != id)
        {
            toDel = toDel->next;
        }
        contactStructType* toDelPrev = toDel->prev;
        toDelPrev->next = NULL;
        idCount = idCount - 1;
        free(toDel);

        system("cls");
        Intestation();
        BoldMagenta();
        printf_s("\n--------------------------------------------------------------------------------------------------------");
        Yellow();
        printf_s("\n\t\t\t\t  --- contatto eliminato --- ");
        BoldMagenta();
        printf_s("\n--------------------------------------------------------------------------------------------------------\n");
        ResetColor();

    }
    else if (id == 0 or id > idCount)
    {
        system("cls");
        Intestation();
        BoldRed();
        printf_s("\n--------------------------------------------------------------------------------------------------------");
        printf_s("\n\t\t\t  --- inserisci un numero compreso tra 1 e %d ---", idCount);
        printf_s("\n--------------------------------------------------------------------------------------------------------");
        ResetColor();
    }
    else
    {
        contactStructType* toDel = contact;

        while (toDel->id != id)
        {
            toDel = toDel->next;
        }

        contactStructType* toDelNext = toDel->next;
        contactStructType* toDelPrev = toDel->prev;

        toDelNext->prev = toDel->prev;
        toDelPrev->next = toDel->next;

        while (toDelNext != NULL)
        {
            toDelNext->id = toDelNext->id - 1;
            toDelNext = toDelNext->next;
        }
        idCount = idCount - 1;
        free(toDel);

        system("cls");
        Intestation();
        BoldRed();
        printf_s("\n--------------------------------------------------------------------------------------------------------");
        Yellow();
        printf_s("\n\t\t\t\t  --- contatto eliminato --- ");
        BoldRed();
        printf_s("\n--------------------------------------------------------------------------------------------------------\n");
        ResetColor();
    }
}

int main()
{
    InitializeAddressBook();
    char c;
    char c2;
    Intestation();

    do
    {
        BoldMagenta();
        printf_s("\n--------------------------------------------------------------------------------------------------------\n");
        ResetColor();
        BoldCyan();
        printf_s("\t- premi 1 per aggiungere un contatto\n");
        printf_s("\t- premi 2 per cercare un contatto\n");
        printf_s("\t- premi 3 per consultare la rubrica\n");
        printf_s("\t- premi 4 per eliminare un contatto\n");
        printf_s("\t- premi 9 per uscire dal programma\n");
        BoldMagenta();
        printf_s("--------------------------------------------------------------------------------------------------------\n");
        printf("\033[0m");
        c = _getch();
        system("cls");
        int w = 1;

        switch (c)
        {
        case '1':
        {
            FillContact();
            do
            {
                BoldMagenta();
                printf_s("\n\n--------------------------------------------------------------------------------------------------------");
                BoldCyan();
                printf_s("\n\tpremi 1 per inserire un nuovo contatto");
                setlocale(LC_ALL, "");
                printf_s("\n\tpremi 9 per tornare al menù principale");
                BoldMagenta();
                printf_s("\n--------------------------------------------------------------------------------------------------------\n");

                c2 = _getch();
                system("cls");
                ;
                if (c2 == '1')
                {
                    FillContact();
                }
                else
                {
                    w = 0;
                }
            } while (w == 1);

            Intestation();
            break;
        }
        case '2':
        {
            char srch[30];
            int s;

            system("cls");
            Intestation();
            BoldMagenta();
            printf_s("\n--------------------------------------------------------------------------------------------------------");
            BoldCyan();
            printf_s("\n\n\t- premi 1 per cercare un contatto in base al nome\n");
            printf_s("\n\t- premi 2 per cercare un contatto in base al cognome\n");
            printf_s("\n\t- premi 3 per cercare un contatto in base al numero di telefono\n");
            BoldMagenta();
            printf_s("\n--------------------------------------------------------------------------------------------------------");

            s = _getch();
            system("cls");
            Intestation();

            if (s == '1')
            {
                BoldMagenta();
                printf_s("\n--------------------------------------------------------------------------------------------------------");
                BoldCyan();
                printf_s("\n\n\tnome da cercare --> ");
                scanf_s("%s", srch, sizeof(srch));

                ResetColor();

                SearchByName(srch);
            }
            else if (s == '2')
            {
                BoldMagenta();
                printf_s("\n--------------------------------------------------------------------------------------------------------");
                BoldCyan();
                printf_s("\n\n\tcognome da cercare --> ");
                scanf_s("%s", srch, sizeof(srch));
                ResetColor();

                SearchBySurname(srch);
            }
            else  if (s == '3')
            {
                BoldMagenta();
                printf_s("\n--------------------------------------------------------------------------------------------------------");
                BoldCyan();
                printf_s("\n\n\tnumero da cercare --> ");
                scanf_s("%s", srch, sizeof(srch));
                ResetColor();

                SearchByNumber(srch);
            }
            break;
        }
        case '3':
        {
            contactStructType* curContact = contact->next;

            Intestation();
            BoldMagenta();
            printf_s("\n--------------------------------------------------------------------------------------------------------");
            Yellow();
            printf_s("\n\t\t\t\t     --- sono presenti %d contatti --- ", idCount);
            BoldMagenta();
            printf_s("\n--------------------------------------------------------------------------------------------------------\n");
            if (curContact == NULL)
            {
                BoldRed();
                printf_s("\n--------------------------------------------------------------------------------------------------------");
                Red();
                printf_s("\n\t\t\t      --- nessun contatto presente in rubrica ---");
                BoldRed();
                printf_s("\n--------------------------------------------------------------------------------------------------------\n\n");
            }
            else
            {
                for (int l = 1; l <= idCount; l++)
                {
                    ResetColor();
                    printf_s("\n\t%d)\t%s %s\t\t\t-->\t\t%s", curContact->id, curContact->name, curContact->surname, curContact->number);
                    ResetColor();
                    curContact = curContact->next;
                }
                BoldMagenta();
                printf_s("\n\n--------------------------------------------------------------------------------------------------------\n\n");
                ResetColor();
            }

            break;
        }
        case '4':
        {
            int delId = 0;

            Intestation();

            if (contact->next == NULL)
            {
                BoldRed();
                printf_s("\n--------------------------------------------------------------------------------------------------------");
                Red();
                printf_s("\n\t\t\t   --- nessun contatto presente in rubrica ---");
                BoldRed();
                printf_s("\n--------------------------------------------------------------------------------------------------------\n\n");
            }
            else
            {
                BoldMagenta();
                printf_s("\n--------------------------------------------------------------------------------------------------------");
                BoldCyan();
                printf_s("\n\t\t\t\t--- Stai eliminando un contatto --- ");
                BoldMagenta();
                printf_s("\n--------------------------------------------------------------------------------------------------------");
                BoldCyan();
                printf_s("\n\n\t- inserisci l'id del contatto da eliminare \t\t-->\t\t");
                scanf_s("\t%d", &delId);
                ResetColor();

                DelContact(delId);


            }
            break;
        }
        case '5':
        {
            system("cls");
            Intestation();
            printf_s("\n\t%d", CountContact());
        }
        default:
        {
        }
        }
    } while (c != '9');
}
qualche dritta?

thanks

20 Risposte

  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    Se all'inizio il file non esiste, non lo puoi leggere. Controlla il risultato della fopen in "rb" e agisci di conseguenza.
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    oregon ha scritto:


    Se all'inizio il file non esiste, non lo puoi leggere. Controlla il risultato della fopen in "rb" e agisci di conseguenza.
    avevo pensato che sarebbe stato fuorviante omettere questo pezzo di codice ma l'ho fatto :
    if (fopen_s(&file, "./addressBook.list", "rb"))
        {
            fopen_s(&file, "./addressBook.list", "wb");
            fclose(file);
        }
    l'ho rimosso solo per postare qui.. per sintetizzare..

    comunque il file esiste e la LoadAddressBook() fa il suo lavoro

    e se nella AddContact() apro in "rb" fopen_s() va a buon fine, mentre in "wb" e "ab" no --> errno 13 (da il problema solo se prima ho eseguito la LoadAddressBook() altrimenti AddContact() mi permette di aprire anche in "wb"..
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    E' fuorviante averlo omesso e fa perdere tempo.

    Hai anche omesso un return all'interno della if o non lo hai proprio messo?
    
    if (fopen_s(&file, "./addressBook.list", "rb"))
        {
            fopen_s(&file, "./addressBook.list", "wb");
            fclose(file);
            return;
        }
    
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    oregon ha scritto:


    E' fuorviante averlo omesso e fa perdere tempo.

    Hai anche omesso un return all'interno della if o non lo hai proprio messo?
    Perdonatemi, ho dato per scontato che non fosse rilevante perché l'if non interviene visto che i file esiste...

    Non ho messo return.. Perdona la pivellaggine, a che cosa servirebbe? Ho cancellato il file e la if fa il suo lavoro già così, se non c'è il file me lo crea...
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    Se esegue la if il file è chiuso. Dopo, come esegue la fread? Ecco a cosa serve la return.
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    oregon ha scritto:


    Se esegue la if il file è chiuso. Dopo, come esegue la fread? Ecco a cosa serve la return.
    che pollo.. ci avrei sbattuto il naso a breve, ti ringrazio e correggo subito, anche perchè se il file non esiste non ha senso andare a leggere niente visto che non esisterebbe nessun contatto, quindi aggiusterò opportunamente.

    ad ogni modo il problema sta nell'altra funzione, AddContact() (o almeno si manifesta lì)..
    dopo aver eseguito la LoadAddressBook() che carica i contatti registrati nel file, ed effettivamente li carica, se voglio inserire un nuovo contatto uso AddContact() che però non riesce a riaprire il file in scrittura. fopen_s() in wb" o "ab" restituisce errno 13 "autorizzazione negata" mentre in "rb" va a buon fine restituendo 0.


    mi ripeto ma lo riscrivo, se ometto l'esecuzione di LoadAddressBook() all'avvio del programma AddContact() riesce ad aprire il file anche in scrittura permettendomi di aggiungere i contatti.

    fclose() nella LoadAddressBook() restituisce 0 e quindi sembrerebbe di aver chiuso il file correttamente.

    sto googlando all'impazzata ma non sono ancora arrivato a niente.. l'approccio è giusto vero?
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    Ho provato il programma con la if e non ho alcun problema.

    Lo hai provato dopo l'inserimento del return nella if?
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    Grazie per il riscontro,
    si, avevo già provato anche con il return ma ho sempre lo stesso problema con l' fopen_s() aggiungendo un contatto, dopo averlo aperto in lettura all'apertura del programma

    ho notato un'altra cosa, se lavoro a 32bit mi carica i contatti dal file senza problemi, se metto x64 la LoadAddressBook() non carica niente..
    non ho la più pallida idea di cosa cambia tra x86 e x64 a livello tecnico.. qualche suggerimento?
    uso visual studio community
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    Ma perché dovresti scrivere il programma a 64 bit? Non c'è motivo ... continua a 32 bit.

    Per il problema, per caso tieni il file aperto in un altro programma mentre esegui il codice?

    In ogni caso, prova a sostituire la fopen_s con la funzione _fsopen
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    oregon ha scritto:


    Ma perché dovresti scrivere il programma a 64 bit? Non c'è motivo ... continua a 32 bit.
    perchè visto che è un'impostazione veloce dalla toolbar di visual studio volevo provare a titolo didattico, non dovrebbe funzionare comunque compilando a 64bit??

    oregon ha scritto:


    Per il problema, per caso tieni il file aperto in un altro programma mentre esegui il codice?
    no, ho controllato

    oregon ha scritto:


    In ogni caso, prova a sostituire la fopen_s con la funzione _fsopen
    ho provato al volo con
    file = _fsopen("./addressBook.list", "wb", _SH_DENYNO);
    e mi da lo stesso errore...
    se volessi usare linguaggio C puro dovrei riuscire a farlo girare comunque in qualche modo oppure no?

    l'errore che mi da è come questo, anche se l'eccezione me la da la fwrite() seguente che vede il file pointer NULL
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    Usa un nome di file come

    "addressBook.list"

    non inserire ./

    e prova anche con la fopen per capire se hai lo stesso problema.
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    oregon ha scritto:


    Usa un nome di file come

    "addressBook.list"

    non inserire ./

    e prova anche con la fopen per capire se hai lo stesso problema.
    niente da fare
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    Hai un antivirus attivo? Prova a disabilitarlo per fare la prova.

    Altrimenti, non so cosa possa essere, bisognerebbe fare prove più approfondire con File Explorer. Ma sarà un problema del tuo PC perché non solo ho provato il codice e funziona ma poi è impossibile che non vada nessuna funzione che apre un file.
  • Re: Fopen_s() fallisce in scrittura e append, errno 13

    oregon ha scritto:


    Hai un antivirus attivo? Prova a disabilitarlo per fare la prova.
    niente antivirus, ho disattivato addirittura quello di windows 10 tramite registro di sistema...

    avrebbe senso provare con un'altra IDE ?
Devi accedere o registrarti per scrivere nel forum
20 risposte