2010-12-16 11 views
1

Ich stehe fest/kämpfe mit einem Problem Ich versuche in C (Linux) mit API-Aufrufe (nur) mehrere Eingabedateien über die Befehlszeile in eine Ausgabedatei zu kopieren. Ich habe im Internet nach Antworten gesucht, aber keine scheint zu lösen. Mein Programm erlaubt mir, mehrere Eingabedateien und eine Ausgabedatei über die Befehlszeile anzugeben. Zum Beispiel:C: mehrere Dateien in einen kopieren

./archiver file1.txt file2 file3 file4 outputfile 

las ich diese Parameter argc/argv verwenden. Aus irgendeinem Grund, wenn ich mache ls -l, ./archiver und outputfile haben die gleiche Anzahl von Bytes, was bedeutet, keine meiner Eingabedateien wurden in meine Ausgabedatei kopiert, nur was auch immer im Speicher war (wenn ich mache cat outputfile zeigt es eine Reihe von diesen)

Keiner der Inhalte aus meinen Eingabedateien befindet sich in meinen Ausgabedateien.

Bitte können Sie mir helfen, da nach dem Bündel von "" Ich weiß nicht, was zu tun Ich habe versucht, auf malloc() etc. lesen, aber ich weiß nicht, wie das implementieren oder wenn das sogar relevant ist hier.

Jede Hilfe wird geschätzt, danke für Ihre Zeit.

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; 
    } 

Ich habe die Fehler nicht enthalten, aber ich habe sie. Danke für die sofortige Antwort.

+3

Post ein wenig Code, sonst ist es unmöglich zu sagen, was los ist. –

+0

Entschuldigung Ist das genug? – donok

+2

Ich vermute, dass dies eine Hausaufgabe ist - wenn ja, solltest du sie als solche markieren. Ihre Frage ist sehr unklar - ich denke, dass Sie frustriert sind und vielleicht ist Ihre Aufgabe bereits zu spät, aber bitte versuchen Sie, klar zu sein, damit wir wissen, wie Sie helfen können.Versuchen Sie, mehrere Dateien miteinander zu verknüpfen, oder versuchen Sie, sie so zu speichern, dass Sie sie später einfach wieder in den Originaldateien trennen können? – nategoose

Antwort

1

Es würde helfen, Ihren Code zu sehen. Es gibt nicht viel, um weiterzumachen, aber ich werde eine wilde Vermutung nehmen. Ich vermute, dass du die Datei kopierst, die durch argv[0] (dein Programm) spezifiziert wird, und den Rest nicht bekommst. Ich glaube nicht, dass ich mit dem, was Sie gegeben haben, besser umgehen kann.

+0

Ich denke, du magst Recht haben, ich benutze es zu oft für viele Sachen, also werde ich es überprüfen. Danke – donok

1

Sie sagen, Sie verwenden nur API-Aufrufe. Von welcher API sprichst du? Die POSIX-API? Die Standard-C-Datei-I/O-API?

Wenn Sie nur Eingabedateien kombinieren, müssen Sie nicht wirklich ein C-Programm schreiben, um es zu tun. Versuchen Sie den Shell-Befehl cat input1 input2 input3 > output, da Sie Linux ausführen.

Wenn Sie ein C-Programm schreiben müssen, um es zu tun, starten Sie einfach. Stellen Sie vor dem tatsächlichen Ausführen eines Datei-I/O sicher, dass Sie die Eingabeargumente korrekt interpretieren können. Ihr Programm einfach in der Befehlszeileneingabe lesen und ausdrucken etwas wie folgt aus:

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

Auf diese Weise können Sie überprüfen, ob Ihr CLI Parsing-Code korrekt funktioniert, bevor Sie sich Gedanken über die Datei starten I/O. Es ist viel einfacher, Dinge einzeln zu debuggen.

+0

Entschuldigung ich meinte POSIX API in meinem Kopf war klar, aber ich vergesse zu erwähnen. – donok

1

Ihre äußere Schleife muss jeden Dateinamen öffnen und am Ende der Schleife schließen. Sie schließen die Ausgabedatei am Ende, nachdem alle Eingabedateien gelesen wurden.

Sie sollten auch den Unterschied zwischen open, read, write und fopen, fread, fwrite lernen.

Verwandte Themen