2010-12-16 64 views
1

我卡住/努力解決問題我嘗試在C(Linux)使用API​​調用(僅)通過命令行將多個輸入文件複製到一個輸出文件。我已經在互聯網上尋找答案,但似乎沒有解決。 我的程序允許我通過命令行指定多個輸入文件和一個輸出文件。例如:C:複製多個文件到一個

./archiver file1.txt file2 file3 file4 outputfile 

予讀取使用argc/argv這些參數。由於某種原因,當我做ls -l時,./archiveroutputfile具有相同的字節數,因此意味着我的輸入文件都沒有被複制到我的輸出文件中,無論是否在內存中(當我做cat outputfile時顯示了其中一堆)

我的輸入文件中的內容都不在我的輸出文件中。

請你能幫助我,因爲在那些「」我不知道該怎麼辦我已經嘗試閱讀malloc()等,但我不知道如何實現,或者如果那甚至在這裏相關。

任何幫助表示讚賞,謝謝你的時間。

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

我沒有包括錯誤,但我確實有錯誤。感謝您立即回覆。

+3

發表一些代碼,否則不可能說出什麼是錯的。 – 2010-12-16 22:41:51

+0

對不起那夠了嗎? – donok 2010-12-16 22:48:43

+2

我懷疑這是一項家庭作業 - 如果是的話,你應該這樣標記它。你的問題很不清楚 - 我認爲你很沮喪,也許你的任務已經很晚了,但請儘量清楚,以便我們知道如何提供幫助。您是否試圖連接多個文件,或者您是否試圖以這種方式存儲它們,以便稍後可以輕鬆地將它們分離回原始文件中? – nategoose 2010-12-16 22:53:42

回答

1

它有助於查看您的代碼。這裏沒有太多要繼續,但我會大膽猜測。我懷疑你正在複製argv[0](你的程序)指定的文件而沒有得到其他的文件。我不認爲我可以用你給的東西做得更好。

+0

我想你可能是對的我用我太多次的東西,所以我會仔細檢查。謝謝 – donok 2010-12-17 15:36:03

1

你說你只使用API​​調用。你在說什麼API? POSIX API?標準的C文件I/O API?

如果你只是組合輸入文件,你並不需要編寫一個C程序來完成它。由於您正在運行Linux,請嘗試使用shell命令cat input1 input2 input3 > output

如果你必須編寫一個C程序來做到這一點,從簡單的開始。在實際執行任何文件I/O之前,請確保您可以正確解釋輸入參數。讓你的程序只需在命令行輸入讀取並打印出來是這樣的:

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

這樣的話,你可以驗證你的CLI解析代碼你開始擔心文件I/O之前正常工作。一次調試一件東西要容易得多。

+0

對不起,我的意思是我的POSIX API很明顯,但我忘了提及。 – donok 2010-12-17 15:30:51

1

您的外部循環需要打開每個文件名,並在循環結束時關閉它。讀完所有輸入文件後,關閉輸出文件。

你也應該學會openreadwritefopenfreadfwrite之間的差異。

相關問題