J'ai utilisé ce code pour lire le fichier. Mais la fonction de fread retour toujours 0. Quelle est mon erreur?
FILE *file = fopen(pathToSourceFile, "rb");
if(file!=NULL)
{
char aByte[50000];
int ret = fread(aByte, sizeof(aByte), 1, file);
if(ret != 0)
{
not jump into there;
fseek(file, 0, SEEK_SET);
fwrite(aByte, ret, 1, file);
}
}
fclose(file);
6 Réponses :
Êtes-vous sûr que votre fichier a une taille supérieure à 50000? Sinon, vous pouvez essayer:
fread(aByte,1, sizeof(aByte), file);
Oui parce que j'ai lu des données à partir d'un fichier MP3 que la taille sur disque est de 3,2 Mo: s
ferror () code> va dire quand quelque chose est faux. p>
Vous pouvez imprimer le message d'erreur réel en utilisant perror () code> . p>
ferror () code> ne vous dira pas ce que i> est faux, ça va vous dire si i> quelque chose est faux - c'est juste une indication vraie / fausse . Utilisation perror () code> si ferror () code> retourne vrai est un bon conseil.
Vous ne pouvez pas Votre relevé que rendements: p> quand courir. p> p> fwrite code> dans un fichier ouvert dans RB code>. RET code> est toujours zéro est faux. Si vous aviez correctement instrumenté votre code, vous ne faites pas de fausses réclamations: p>
Oui désolé je change à RB pour tester Fread. S'il vous plaît passez à la follette. :)
Il est préférable de couper et de coller le code que vous rencontrez des problèmes avec la fin, vous pouvez modifier votre question si votre code change.
Avez-vous: p>
Sinon, et si vous compilez sans-wall, le compilateur C peut supposer de manière incorrecte que le deuxième argument de Fread () est un intégrement plutôt que d'off_t, qui peut gâcher l'appel de la fonction. Votre extrait de code ne montre aucune déclaration #include, alors assurez-vous que vous incluez tout ce que vous utilisez. P> #include
Si quelqu'un d'autre circule dans cela. Je viens de courir dans un problème similaire. C'est parce que la 2e argument de Fread devrait être la taille de Ceci devrait fonctionner à condition que Buff a au moins 1 élément: P> int ret = fread(aByte, sizeof(aByte[0]), 1, file);
Dans mon cas, je voulais lire un fichier de taille 6553600 octets (un MP3), et il revenait 0 octets lus. Il me conduisait fou, jusqu'à ce que j'ai essayé de creuser manuellement 30 octets et j'ai lu 30 octets. P>
J'ai commencé à jouer avec elle et à voir combien peut-il lire, et il s'avère que cela peut lire exactement 262144 (2 ^ 18) octets, si vous le demandez de lire 262145 octets, il se lit 0. P>
Conclusion: au moins avec cette fonction, vous ne pouvez pas charger l'ensemble du fichier en une seule fois. P>
Le fichier a-t-il définitivement au moins 50000 octets?
@Chals, il ne faut pas avoir besoin de.
Fread Code> doit renvoyer le nombre d'octets réellement lus, ce qui peut être inférieur à 50000.Le fichier existe pour que la fread doit être de retour non 0 :(.
@ user418304 Pourquoi avez-vous roulé à la version non formatée?
@Matthew Flaschen: Non.
Fread Code> Renvoie le nombre de Objets i> Lire. Si vous lisez jusqu'à un objet d'octet 50000, il retournera 0 ou 1.Pourquoi ce marquage est-il marqué
C ++ code>. C'est pur C.Le fichier est supérieur à 50000 octets car il s'agit d'un fichier MP3 standard.
@Chals, tu as raison; mon erreur. J'aurais dû lire plus attentivement.
Tout le monde peut-il s'il vous plaît Stop i> Suppression de la balise C ++ de cette question. C'est évidemment la langue que cet utilisateur418304 veut i> utiliser. Juste parce que le code est également valide C ne signifie pas que la question concerne la question de C. (les gens ne retournent pas de questions comme C ++ simplement parce que le code utilise le sous-ensemble commun, fais-ils?)
Il compile et lit correctement comme C ou C ++. C'est le
fwrite code> cassé.Son intention n'était pas de honte, c'était d'être précis; C'était incorrect comme écrit. Stackoverflow est recherché par beaucoup pour trouver des réponses. J'essaie d'aider l'Op et donc à la fois. Si vous êtes en désaccord, s'il vous plaît rébranchez mon changement ou de le modifier, je ne "modifierai pas la guerre".
@MSW S'il vous plaît n'essayez pas de justifier de vous moquer de l'OP avec vouloir les aider. Ce type de comportement n'est ni drôle ni aider quelqu'un.
@balpha - Ne présumez pas de connaître mon intention, il est inconnu dans un modérateur.