日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++:读写txt/二进制文件

發布時間:2023/12/10 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++:读写txt/二进制文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

fopen() 函數用來打開一個文件,它的原型為:

FILE *fopen(char *filename, char *mode);

filename為文件名(包括文件路徑),mode為打開方式,它們都是字符串。fopen() 會獲取文件信息,包括文件名、文件狀態、當前讀寫位置等,并將這些信息保存到一個FILE類型的結構體變量中,然后將該變量的地址返回。

FILE是在stdio.h頭文件中定義的一個結構體,用來保存文件信息。

如果希望接收 fopen() 的返回值,就需要定義一個 FILE 類型的指針。例如:

FILE *fp = fopen("demo.txt", "r");

表示以“只讀”方式打開當前目錄下的 demo.txt 文件,并使 fp 指向該文件,這樣就可以通過 fp 來操作 demo.txt 了。fp 通常被稱為文件指針。

寫入內容到txt文件

FILE* fp = fopen("model_vertices_recalc.txt", "a+");//r(read),w(write),a(append) fprintf(fp, "This is testing for fprintf...\n");//第二個形參類型:const char* _Format fprintf(fp, "This is testing for %d fprintf...\n",5);//第二個形參支持兩種方式 fputs("This is testing for fputs...\n", fp);//這種方式不支持寫入變量 fputc('M', fp);//這個是寫入字符 fclose(fp); return 0;

從txt文件讀取內容

FILE* fp = NULL; char buff[255];fp = fopen("model_vertices_recalc.txt", "r");fgets(buff, 255, (FILE*)fp);//讀取一行字符串 printf("0: %s\n", buff);fscanf(fp, "%s", buff);//遇到空格停止 printf("1: %s\n", buff); int i = 0; sscanf(buff, "%d", &i);//將buff中的數據寫入到int類型中 cout << i << endl;fgets(buff, 255, (FILE*)fp);//讀取整行,從上面那個空格出讀取剩余的整行 printf("2: %s\n", buff);fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff); fclose(fp);

寫入數據到二進制文件

FILE* fp = NULL;fp = fopen("test.bin", "wb+");for (int i = 0; i < 10; i++){fwrite((void*)&i, sizeof(int), 1, fp);//將10個int數據一次寫入文件}fclose(fp);

從二進制文件中讀取數據

FILE* fp = NULL;fp = fopen("test.bin", "rb");int a[10];for (int i = 0; i < 10; i++){fread((void*)&a[i], sizeof(int), 1, fp);//讀取上面寫入的int給到數組a}for (size_t i = 0; i < 10; i++){cout << a[i] << endl;}fseek(fp, sizeof(int)*3, SEEK_SET);//對文件指針重新定位,讀取第四個數int b;fread((void*)&b, sizeof(int), 1, fp);cout << b << endl;fclose(fp);

?

c++將txt中的數據保存為二進制文件

//==============================//將txt中的數據保存為二進制文件,txt文件中每行有四個數值,將其保存為float數據//存入bin文件內String vertices_file = "D:\\model_vertices_recalc.txt";std::ifstream fv(vertices_file, std::ios::in);std::ofstream outFile("TwoPairCoordinate.bin", std::ios::out | std::ios::binary);if (!outFile){std::cerr << "failed to open the file." << std::endl;return -1;}float cor;std::vector<float> vertices;while (!fv.eof()){fv >> cor;outFile.write(reinterpret_cast<const char*>(&cor), sizeof(float));}fv.close();outFile.close();

C++將txt中的兩列數據分別讀取出來,存到兩個向量中

int main() {ifstream ifs; //創建流對象ifs.open("***.txt", ios::in); //打開文件if (!ifs.is_open()) //判斷文件是否打開{cout << "打開文件失敗!!!";return 0;}vector<float> target_1, target_2; //用于存放目標數據vector<string> item; //用于存放文件中的一行數據string temp; //把文件中的一行數據作為字符串放入容器中while (getline(ifs, temp)) //利用getline()讀取每一行,并放入到 item 中{item.push_back(temp);}ifs.close(); //關閉文件,此時已經把數據全部讀出來放在item里了,后面只需操作item即可for (auto it = item.begin(); it != item.end(); it++){cout << *it << endl;istringstream istr(*it); //其作用是把字符串分解為單詞(在此處就是把一行數據分為單個數據)string str;int count = 1; //統計一行數據中單個數據個數//獲取文件中的第 1、2 列數據while (istr >> str) //以空格為界,把istringstream中數據取出放入到依次s中{if (count == 1) //獲取第1列數據{float r = atoi(str.c_str()); //數據類型轉換,將string類型轉換成float,如果字符串不是有數字組成,則字符被轉化為 0target_1.push_back(r);}else if (count == 2)//獲取第2列數據{float r = atoi(str.c_str()); //數據類型轉換,將string類型轉換成floattarget_2.push_back(r);}count++;}}cout << "數據個數(灰度256以內):" << target_1.size() << endl;auto it = target_1.begin();auto itt = target_2.begin();for (; it != target_1.end(), itt != target_2.end(); it++, itt++){cout << *it << " \t" << *itt << endl;}system("pause");return 0; }

上面的方法假如操作的文件中有小數部分,會忽略掉,下面這種可以正常把小數部分讀取出來

int main() {vector<float> V;vector<float> SRC_GRAY_ARR, SRC_LIGHT_ARR;ifstream data("***.txt", ios::in);float d;int N = 0;while (data >> d){if (N % 2 == 0){SRC_GRAY_ARR.push_back(d);}else{SRC_LIGHT_ARR.push_back(d);}N++;}data.close();auto it = SRC_GRAY_ARR.begin();auto itt = SRC_LIGHT_ARR.begin();for (; it != SRC_GRAY_ARR.end(), itt != SRC_LIGHT_ARR.end(); it++, itt++){cout << *it << " \t" << *itt << endl;}system("pause");return 0; }

將opencv Mat保存為二進制文件

std::ofstream fout1("C:/Users/**.bin", std::ios::binary | std::ios::trunc); for (int i = 0; i < map_rows; i++) {for (int j = 0; j < map_cols; j++){fout1.write(reinterpret_cast<char*>(&warp_map.at<float>(i, j)), sizeof(float));} } fout1.close();

總結

以上是生活随笔為你收集整理的C/C++:读写txt/二进制文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。