2011-04-17 90 views
1

我已收到一個原始文件,其中包含幾個jpg圖像。我必須通過文件,找到每個JPG圖像,並將這些圖像分別放在一個單獨的文件中。到目前爲止,我的代碼可以找到每個圖像開始和結束的位置。我還編寫了一些代碼,用於命名我可以用來放置圖片的幾個文件名。它是一個數組:char filename [],它包含以下名稱:image00.jpg - image29.jpg。c中的文件處理?

我無法弄清楚如何在每次找到圖像時打開文件,然後關閉該文件併爲下一張圖像打開一個新文件。我需要使用fwrite()嗎?此外,每個圖像都是512字節的塊,所以我只需要找到第一個512字節的新圖像。我需要將其添加到fwrite中嗎?

因此,總結我的問題,我不明白如何使用fwrite(),如果這是我應該用來寫入這些文件。 另外,我不知道如何使用我已創建的名稱來打開這些文件。

在此先感謝您的幫助。讓我知道是否需要發佈任何其他代碼。

+0

'字符的文件名片段[] = { 「image00.jpg」};'是一個錯誤的聲明,應該是'字符文件名[] = 「image00.jpg」;'你已經將char * []賦值給char []。 – MByD 2011-04-17 03:57:45

+0

編輯代碼示例會感到不友好和無益。我很欣賞其他人已經指出了一些錯誤,但目前的問題狀態讓我很不清楚你*做了什麼*,*不知道*你現在*和*不能做什麼。 – dmckee 2011-04-17 04:20:23

回答

1
  1. 使用fopen(rawfilename, "rb");打開原始文件進行閱讀。和fread來讀取它。
  2. 使用fopen(outfilename, "wb");打開輸出文件進行寫入,並使用fwrite寫入。
  3. 正如我的評論所述,您將char *[]分配到char*,請使用char filename[] = "image00.jpg";代替。
  4. 不要忘記關閉每個文件完成其處理(R/W)後(看fclose()在其他環節的同一站點)
  5. 決定多少字節通過解析jpeg header每次讀取。使用malloc來分配需要讀取的字節數量,並且記住,對於緩衝區的每個分配,您需要稍後分配的緩衝區。
0

幾乎所有的book on C programming應涵蓋你需要的功能。正如MByD指出的那樣,你會想使用函數fopen(),fwrite()和fclose()。

我想,你的代碼可能包含看起來像

/* Warning: untested and probably out-of-order code */ 
... 
char **filename = { 
    "image00.jpg", "image01.jpg", "image02.jpg", 
    ... 
    "image29.jpg" }; 
... 
int index = 0; 
const int blocksize = 512; /* bytes */ 
... 
index++; 
... 
FILE * output_file = fopen(filename[index], "wb"); 
fwrite(output_data, 1, blocksize, output_file); 
fclose(output_file); 
... 
+0

從索引中生成文件名是不是更合理?可能使用'sprintf()'來格式化名稱? – 2011-04-17 04:36:08

+0

大衛,我改變了我的文件名到你有什麼,但我得到一個警告: 警告:從不兼容的指針類型初始化 – Joey 2011-04-17 20:50:24

+0

@Joey - 你應該聲明它爲數組:'char * filename []'。 – MByD 2011-04-18 11:58:59