2010-12-16 3 views
1

Je suis coincé/en proie à un problème J'essaie en C (Linux) d'utiliser des appels API (seulement) pour copier plusieurs fichiers d'entrée via la ligne de commande dans un fichier de sortie. J'ai cherché des réponses sur Internet, mais aucune ne semble résoudre. Mon programme me permet de spécifier plusieurs fichiers d'entrée et un fichier de sortie via la ligne de commande. Par exemple:C: copier plusieurs fichiers en un seul

./archiver file1.txt file2 file3 file4 outputfile 

Je lis ces paramètres à l'aide argc/argv. Pour une raison quelconque, quand j'ai ls -l, ./archiver et outputfile ont le même nombre d'octets, ce qui signifie qu'aucun de mes fichiers d'entrée n'a été copié dans mon fichier de sortie, juste ce qu'il y avait en mémoire (quand j'en ai cat outputfile)

Aucun des contenus de mes fichiers d'entrée ne se trouve dans mes fichiers de sortie.

S'il vous plaît pourriez-vous m'aider après ces tas de "" Je ne sais pas quoi faire J'ai essayé de lire sur malloc() etc. mais je ne sais pas comment l'implémenter ou si c'est même pertinent ici.

Toute aide est appréciée, merci pour votre temps.

file_desc_in = open(argv[i],O_RDONLY,0);  
//NEED a loop to copy multiple files in... 
while (!eof) { 
    bytes_read = read(file_desc_in, &buffer, sizeof(buffersize)); 

    if (bytes_read > 1) 
     bytes_written = write(file_desc_out, &i, bytes_read); 
    else { 
     eof=1; 
    } 

Je n'ai pas inclus les erreurs mais je les ai. Merci d'avoir répondu immédiatement.

+3

Publiez du code, sinon il est impossible de dire ce qui ne va pas. –

+0

sorry Est-ce suffisant? – donok

+2

Je suppose que c'est une tâche à faire - si c'est le cas, vous devriez l'étiqueter comme tel. Votre question est très floue - je pense que vous êtes frustré et peut-être que votre mission est déjà en retard, mais s'il vous plaît essayez d'être clair afin que nous sachions comment aider.Essayez-vous de concaténer plusieurs fichiers, ou essayez-vous de les stocker de telle manière que vous puissiez facilement les séparer à nouveau dans les fichiers d'origine plus tard? – nategoose

Répondre

1

Il serait utile de voir votre code. Il n'y a pas grand chose à faire ici, mais je vais deviner. Je suppose que vous copiez le fichier spécifié par argv[0] (votre programme) et ne pas obtenir le reste. Je ne pense pas que je puisse faire mieux avec ce que vous avez donné.

+0

Je pense que vous avez raison, je l'utilise trop souvent pour beaucoup de choses, donc je vais vérifier. Merci – donok

1

Vous dites que vous n'utilisez que des appels d'API. De quelle API parlez-vous? L'API POSIX? L'API I/O du fichier C standard?

Si vous combinez simplement des fichiers d'entrée, vous n'avez pas vraiment besoin d'écrire un programme C pour le faire. Puisque vous utilisez Linux, essayez d'utiliser la commande shell cat input1 input2 input3 > output.

Si vous devez écrire un programme C pour le faire, démarrez simplement. Avant d'effectuer des E/S de fichiers, assurez-vous que vous pouvez interpréter correctement les arguments d'entrée. Demandez à votre programme simplement lire dans l'entrée de ligne de commande et d'imprimer quelque chose comme ceci:

Input files: file1.txt file2.txt file2.txt 
Output files: outputfile.txt 

De cette façon, vous pouvez vérifier que votre code d'analyse syntaxique CLI fonctionne correctement avant de commencer à se soucier de fichier E/S. Il est beaucoup plus facile de déboguer les choses une pièce à la fois.

+0

désolé je voulais dire API POSIX dans ma tête, il était clair, mais j'ai oublié de mentionner. – donok

1

Votre boucle externe doit ouvrir chaque nom de fichier et le fermer à la fin de la boucle. Vous fermez le fichier de sortie à la toute fin, après que tous les fichiers d'entrée ont été lus.

Vous devez également apprendre la différence entre open, read, write et fopen, fread, fwrite.

Questions connexes