C 檔案讀寫

2021-10-10 20:10:45 字數 3545 閱讀 2799

最近需要完成乙個樹葉分類的作業,需要提取樹葉的紋理特徵並將其相關的引數記錄下來,需要用到檔案的讀寫操作,此處就詳細記錄一下相關的知識。根據我自身需要用到的東西,大概可以分為普通c++中.txt檔案的讀取以及opencv中批量的讀取。

主要參考:

和fstream提供了三個類,用來實現c++對檔案的操作。(檔案的建立、讀、寫)。

ifstream – 從已有的檔案讀

ofstream – 向檔案寫內容

fstream - 開啟檔案供讀寫

檔案開啟模式:

檔案指標位置在c++中的用法:

ios::beg 檔案頭

ios::end 檔案尾

ios::cur 當前位置

例子:file.seekg(0,ios::beg); //讓檔案指標定位到檔案開頭

file.seekg(0,ios::end); //讓檔案指標定位到檔案末尾

file.seekg(10,ios::cur); //讓檔案指標從當前位置向檔案末方向移動10個位元組

file.seekg(-10,ios::cur); //讓檔案指標從當前位置向檔案開始方向移動10個位元組

file.seekg(10,ios::beg); //讓檔案指標定位到離檔案開頭10個位元組的位置

常用的錯誤判斷方法:

good() 如果檔案開啟成功

bad() 開啟檔案時發生錯誤

eof() 到達檔案尾

接下來是**實戰:

#include

#include

using

namespace std;

void

main()

else

} in.

close()

;//關閉檔案

}

建立com.txt的檔案,並且寫如資料如下:

是用來讀取回車鍵的,如果沒這一行,輸出的結果一閃就消失了

}讀取檔案,並輸出資料:

這個方法讀取的檔案,所有字元都一起顯示,不會分行。這裡字母z顯示兩次,是正常的,因為在輸出檔案最後乙個字母z之後,又輸出了一次(可以仔細考慮程式**)。

讀取檔案某一行內容:

#include

#include

#include

using

namespace std;

intcountlines

(char

*filename)

else

//檔案存在

return n;

}readfile.

close()

;}string readline

(char

*filename,

int line)

if(file.

fail()

)if(line>lines)

while

(getline

(file,temp)

&&ifile.

close()

;return temp;

}void

main()

很顯然,根據以上程式,利用迴圈,可以逐行讀取整個檔案內容。

三、統計檔案的行數

#include

#include

using

namespace std;

intcountlines

(char

*filename)

else

//檔案存在

return n;

}readfile.

close()

;}void

main()

以上程式的設計思路沒有問題,但在實際操作的時候會發現統計出的行數與實際不符,原因在於readfile.getline(line,512,』\n』)這一句:當一行字元超過512或遇到回車之後,行數自動加1.如果換行符在新的一行,返回的結果會比實際多1;如果不在新的一行,返回結果與實際相符。可以修改如下:

#include

#include

#include

using

namespace std;

intcountlines

(char

*filename)

else

//檔案存在

return n;

}readfile.

close()

;}void

main()

四、讀取檔案資料到陣列

#include

#include

#include

using

namespace std;

intcountlines

(char

*filename)

//獲取檔案的行數

else

//檔案存在,返回檔案行數

return n;

}readfile.

close()

;}void

main()

else

//檔案存在

file.

close()

;//關閉檔案

for(i=

0;i)//輸出陣列內容

cout<

<<

"\t"

<

<

cin.

get();

cin.

get();

}}

參考:

#include

#include

#include

#include

#include

using

namespace cv;

using

namespace std;

intmain()

for(

unsigned

int frame =

0; frame < image_files.

size()

;++frame)

return0;

}

結果:

c 檔案讀寫 文字讀寫

include int main else return 0 格式 intfscanf file stream,constchar format,返回值 如果成功,該函式返回成功匹配和賦值的個數。如果到達檔案末尾或發生讀錯誤,則返回 eof 引數1 file stream 檔案指標 引數2 cons...

C 檔案讀寫

原文 http www.vckbase.com document viewdoc id 1439 原作 john peregrine file i o using c 序論 我曾發表過檔案輸入輸出的文章,現在覺得有必要再寫一點。檔案 i o 在c 中比烤蛋糕簡單多了。在這篇文章裡,我會詳細解釋asc...

C 讀寫檔案

1 使用filestream讀寫檔案 檔案頭 using system using system.collections.generic using system.text using system.io 讀檔案核心 byte bydata new byte 100 char chardata ne...