2015-12-13 1 views
0

J'ai vu beaucoup d'exemples d'E/S avec des fichiers texte Je me demandais si vous pouviez faire la même chose avec d'autres types de fichiers comme mp3, jpg, zip fichiers, etc.?Comment saisir et sortir différents types de fichiers en C++

Est-ce que iostream et fstream fonctionneront pour tous ces éléments ou ai-je besoin d'une autre bibliothèque? Ai-je besoin d'un nouveau SDK?

Toutes les données sont binaires, donc je pense que ce serait aussi simple que ça. Mais j'ai été désagréablement surpris avant. Puis-je convertir tous les fichiers au format texte ou binaire?

Répondre

0

Vous pouvez travailler sur les flux binaires en les ouvrant avec openmode binary:

ifstream ifs("mydata.mp3", ios_base::binary); 

Ensuite, vous lire et à écrire tout contenu binaire. Cependant, si vous avez besoin de générer ou de modifier un tel contenu, de lire une vidéo ou d'afficher une image, vous devez connaître les détails intérieurs du format que vous utilisez. Cela peut être extrêmement complexe, donc une bibliothèque serait recommandée.Et même avec une bibliothèque, des compétences avancées en programmation sont requises.

Exemples de bibliothèques open source: ffmpeg pour le format audio/vidéo habituelle, portaudio pour l'audio, CImg pour le traitement de l'image (en C++), libpng pour le format graphique PNG, lipjpeg pour jpeg. Notez que la plupart des bibliothèques offrent un C api.

Certains systèmes d'exploitation prennent également en charge certains types de fichiers natifs (exemple, windows bitmaps).

+0

Commande très utile. Merci pour ça. Maintenant, si je dois télécharger toutes ces bibliothèques, sera-t-il facile de les intégrer dans Visual Studio 2010? – Mindril

+1

Ne téléchargez que ce que vous devez utiliser pour votre programme spécifique, si vous n'utilisez pas d'audio, pourquoi importer vers VS 'portaudio'? À propos de votre deuxième demande, si vous suivez la documentation d'installation sur chaque projet, vous devriez les utiliser en un rien de temps avec VS ... Gardez à l'esprit que vous devez aussi apprendre à les utiliser – rlam12

+0

Ce sont toutes des bibliothèques multiplateformes, fournies dans format source Certains d'entre eux ont des instructions pour les compiler avec VS 2010. Certains d'entre eux sont un script de construction utilisant NMAKE (mais en supposant que NMAKE soit dans le fichier path et que les variables d'environnement soient correctement définies). Ce n'est pas toujours un morceau de gâteau ;-) – Christophe

0

Vous pouvez ouvrir ces fichiers à l'aide de fstream, mais il est important de noter que vous devez être conscient de ce qui est contenu dans le fichier pour pouvoir le traiter.

Si vous voulez juste l'ouvrir et cracher des ordures, alors vous pouvez certainement commencer juste à la première ligne du fichier et pousser exhaustivement toutes les données dans votre console.

Si vous savez à quoi ressemble le fichier à l'intérieur, vous pouvez le traiter comme n'importe quel autre fichier.

Il peut y avoir des bibliothèques spécifiques pour le traitement de fichiers spécifiques, mais la bibliothèque fstream vous permettra d'accéder à n'importe quel fichier que vous souhaitez.

+0

Donc, fondamentalement, je peux accéder à tous les bits mais je dois savoir quels bits font quoi. – Mindril

2

Il dépend de ce que vous entendez par « travail »

Vous pouvez penser à ces fichiers comme un livre écrit en grec.

Si vous voulez simplement jouer avec la représentation binaire (afficher le texte en grec sur l'écran) alors oui, vous pouvez le faire.

Si vous voulez extraire effectivement quelques informations: modifier flux vidéo, retirez la voix de l'audio (réellement comprendre ce qui est écrit), alors vous devez soit analyser le format de fichier vous-même (apprendre le grec) ou d'utiliser certains bibliothèque spécialisée (engager un traducteur).

Quoi qu'il en soit, filestreams sont adaptés pour accéder réellement ces données de fichiers (et de nombreuses bibliothèques les utilisent sous le capot)

+0

Ces bibliothèques spécialisées font-elles partie de la bibliothèque c standard? Sont-ils inclus dans le studio visuel 2010. – Mindril

+0

@Mindril, non, ils ne sont pas. Vous devez les télécharger et configurer les types de fichiers que vous voulez. Il y a des propositions pour ajouter des librairies pour travailler avec certains types de fichiers en standard C++, mais je doute que l'une d'elles trouve son chemin dans Standard avant 2020 –

0

Tous les fichiers sont octets seulement. Rien ne vous empêche de lire/écrire ces octets comme bon vous semble.

L'astuce est de faire quelque chose utile avec ces octets. Vous pouvez lire les octets d'un fichier .jpg, par exemple, mais vous devez savoir ce que ces octets signifient, et c'est complicated. Habituellement, il est préférable d'utiliser des bibliothèques écrites par des personnes qui connaissent le format en question, et laissez-les faire face à cette complexité.

+0

On dirait que vous êtes tous sur la même page. J'ai besoin de lire un peu plus loin. Depuis que j'ai posé toutes les bonnes questions que je peux penser à l'atm, je vais demander un stupide: P (peut-être) Si je nourris un fichier dans mon compilateur et le brouiller une douzaine de façons, alors le changer ou ne rien faire et le cracher, ce fichier sera-t-il le même, avec le même comportement ou l'alimente-t-il automatiquement d'une manière ou d'une autre? Je suppose que non, mais ça ne fait pas de mal d'être sûr. – Mindril

+0

Les octets sont des octets. Brouiller et débrouiller ne les change pas. C'est exactement ce que font les choses comme la compression et le cryptage. –