2010-12-06 50 views
1

Je n'ai jamais utilisé fwrite(), donc je ne suis pas sûr de ce que je fais de mal. Je ne fais que le tester maintenant et tout ce que je veux faire est d'essayer d'écrire un seul caractère dans un fichier jusqu'à ce qu'il atteigne la fin. Le fichier que j'écris est celui que j'ai téléchargé sur le site Web de mon professeur. Quand j'en vérifie les propriétés, le type est seulement listé comme "fichier". C'est supposé être juste un fichier vide de 2 Mo pour que nous puissions écrire notre code (laboratoire de système de fichiers si quelqu'un se demande). Voici mon code: « Assertion de débogage a échoué ... Expression :(»C - fwrite() ne pas sortir dans le fichier

#include <stdio.h> 
#include <string.h> 
int main() 
{ 
    char c; 
    FILE *fp; 
    char testing[2] = {'c'}; 

    fp = fopen("Drive2MB", "rw"); 

    fseek(fp, 0, SEEK_SET);  //make sure pointers at beginning of file 
    while((c=fgetc(fp))!=EOF) 
    { 
     fwrite(testing, 1, sizeof(testing), fp); 
     fseek(fp, 1, SEEK_CUR); //increment pointer 1 byte 
    } 
    fclose(fp); 
} 

Quand je lance cela, un message d'erreur apparaît disant fichier non valide en mode ouvert «0) et imprime » Le programme « [3896 ] filesystem.exe: Native 's'est terminé avec le code 3 (0x3). "

+0

Est-ce que ce sont les devoirs? – Asaph

+0

J'espère que c'est un laboratoire sur la façon d'utiliser les systèmes de fichiers par opposition à la façon de les concevoir. Parce que vous devriez vraiment savoir comment utiliser un système de fichiers avant même d'essayer de concevoir ou même d'en implémenter un ... (Et le fait que votre professeur ait ressenti le besoin de vous fournir un fichier vide m'effraie) –

+0

pas spécifiquement, mais je Doivent utiliser fwrite dans un devoir – Anon

Répondre

3

Vous avez ouvert le fichier à lire (c'est ce que le r signifie dans fopen("Drive2MB", "r");) .Vous ne pouvez pas écrire dans un fichier ouvert pour lecture.

+0

Doh, une erreur stupide, mais malheureusement, ça ne marche pas non plus. Il me donne un message d'erreur "Debug Assertion Failed! .... Expression: (" Mode d'ouverture de fichier Invalide ", 0), puis imprime" Le programme '[3896] filesystem.exe: Native' est sorti avec le code 3 (0x3 " – Anon

+1

@Anon: Il n'y a pas de mode comme" rw ", c'est soit" r + "ou" w + "selon ce que vous voulez faire –

+0

Vous ne devriez pas vraiment essayer de lire et écrire dans le même fichier à La méthode la plus robuste consiste à lire le fichier en mémoire, à apporter des modifications à la mémoire, puis à tout réécrire, en supposant que vous ayez réellement envie de lire quoi que ce soit, il semble que vous vouliez simplement connaître la taille du fichier. BTW, toute opération d'écriture ou de lecture avance automatiquement la position du fichier par le montant correspondant - c'est pourquoi ils sont appelés fichiers ** streams ** (pas sûr si vous avez entendu le terme, il est plus d'une chose en C++.) –

0
fp = fopen("Drive2MB", "r") 

votre ouverture de votre fichier en lecture seule

essayer

fp = fopen("Drive2MB", "r+"); 
+0

En C il n'y a pas de RW. http://www.friedspace.com/fopen.html – Paul

+0

oups mon mauvais, mélangé langues encore désolé. –

1

Vous l'ouvrir en mode lecture seule

Utilisez r + pour le fopen

0

Vous avez ouvert le fichier en lecture avec la partie "r" de fopen . Pour écrire dans le fichier, vous pouvez l'ouvrir en mode lecture/écriture ou en mode écriture.

// Read/write mode 
fp = fopen("Drive2MB", "r+"); 

// Write only mode 
fp = fopen("Drive2MB", "w"); 

Je n'aime jamais utiliser personnellement "rw". Lorsque vous ouvrez un fichier, il devrait vraiment avoir une raison d'être ouvert. Vous n'avez pas non plus besoin d'appeler fseek pour aller au début du fichier et vous n'avez pas besoin d'utiliser fseek pour avancer le pointeur de fichier. fopen l'ouvrira automatiquement au début du fichier et fwrite avancera automatiquement le pointeur. fseek ne doit être utilisé que si vous "cherchez" à l'intérieur du fichier pour arriver à un point spécifique.

Dans le cas que vous avez indiqué, vous n'auriez besoin que du mode write ("w") car vous ne lisez jamais le fichier.

+0

Il n'y a pas de mode ouvert tel que "" rw "'. Ce serait une combinaison illégale de modes pour la fonction 'fopen'. Pour ouvrir un fichier à la fois en lecture et en écriture, le mode "r +" 'est utilisé. – AnT

+0

Oups, je supposais juste qu'il existait basé sur un autre poste. Je vais changer ça. –