Problème avec fopen() en C sous Windows 8

Fermé
Lumpy-Rock Messages postés 68 Date d'inscription jeudi 6 mai 2010 Statut Membre Dernière intervention 19 juillet 2014 - 29 juin 2012 à 12:09
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 29 juin 2012 à 18:19
Bonjour,
J'ai récemment installé Windows 8 Release Preview et j'ai aussi transféré mes projets de programmation dessus. Mais je me suis rendu compte que la fonction fopen() ne marche pas, mon fichier est toujours égal à NULL. C'est sûrement pas une erreur de syntaxe puisque le programme marchait parfaitement sur Windows 7.

Est ce que Windows 8 ne supporte plus cette fonction ? Il faut que je passe à un langage plus récent ?

Merci de votre aide :)
A voir également:

4 réponses

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 29/06/2012 à 12:21
Salut,

Ton code nous aiderait. Poste le passage concerné avec les balises "code".

Le plus probable est que tu essayes d'accéder à une ressource qui n'existe pas ou pour laquelle ton programme n'a pas de droits d'accès.

Sinon, pour obtenir des infos sur l'erreur, mets #include <errno.h>

puis en supposant que ton descripteur de fichier soit "pFD" mets ceci après ton fopen:

if (pFD == NULL) 
{ 
    perror ("L'erreur suivante est survenue"); 
    printf( "Valeur de errno: %d\n", errno ); 
} 

Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 29/06/2012 à 12:56
Re tu pourrais creuser ceci :

(sous toutes réserves car je n'ai jamais eu de Windows 8 sous la main et je découvre)

Je pense que tu trouveras ces pages intéressantes :

https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh700360(v=win.10)?redirectedfrom=MSDN

et cet article intéressant : https://docs.microsoft.com/en-us/previous-versions/windows/hh465045(v=win.10)?redirectedfrom=MSDN

You're still coding in C++, and you can access the STL, the CRT, and any other C++ libraries, except that you can't invoke certain functions directly, such as those related to file I/O.

Puis plus bas :

A Metro style app runs in a security container that has limited access to the file system, network resources, and hardware. When a user installs an app from the Windows Store, Windows looks at the metadata in the Package.appxmanifest file to determine what capabilities the app requires. For example, an app might have to access data from the Internet, documents from the user's Document Library, or the user's webcam and microphone. When the app is installed, it displays to the user the capabilities it needs, and the user must grant permission before it can access those resources. If the app doesn't request and receive permission for a resource it needs, it won't be allowed access to that resource at run time.

Les application s'exécutent dans un bac à sable sous Windows 8 semble-t-il.

Les tutoriaux disponibles sur msdn parlent de Visual Studio 2012.

Désolé, je ne peux pas te renseigner plus :-)


Dal
0
Lumpy-Rock Messages postés 68 Date d'inscription jeudi 6 mai 2010 Statut Membre Dernière intervention 19 juillet 2014 1
29 juin 2012 à 13:48
Bon alors voilà mon code :

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
    errno = 0;
    FILE *fichier = fopen("bonjour.txt", "r");

    if (fichier == NULL)
    {
        printf("Erreur : %d\n", errno);
    }
    else
    {
        printf("Fichier ouvert !\n");
    }

    fclose(fichier);

    return EXIT_SUCCESS;
}


J'obtiens la valeur Errno = 2, soit "No such file or directory". Mais c'est vraiment bizarre, le fichier est bien là, j'ai essayé de la changer de nom, d'emplacement, rien y fait ... Je suis dans un sous dossier de "Documents", je peux pas ne pas y avoir accès si ? Et j'ai essayé de le démarrer en Administrateur ça donne la même chose.

Merci beaucoup, je vais aller voir ces articles .. Mais l'extrait que tu cite parle de l'interface Metro (la toute nouvelle, semblable à celle de Windows phone). En fait Windows 8 est divisé en deux interfaces, parcequ'on peut à tout moment repasser sur une interface bureau classique, et c'est la dessus que je travaille ...
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 29/06/2012 à 18:23
Je pense que tu dois utiliser la nouvelle API WinRT, compte tenu du nouveau modèle de sécurité de Windows 8, et composer avec les contraintes de ton "bac à sable" en y mettant les fichiers utilisés par ton application.

http://www.srtsolutions.com/winrt-file-access
http://lunarfrog.com/blog/categories/file-system

C'est juste le fruit de mes recherches (comme indiqué, je n'ai jamais eu de Windows 8 sous la main et je découvre... et ... cela ne donne pas envie :-(.


Dal
0