程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 不可或缺 Windows Native (14),native14

不可或缺 Windows Native (14),native14

編輯:C++入門知識

不可或缺 Windows Native (14),native14


[源碼下載]


不可或缺 Windows Native (14) - C++: 文件



作者:webabcd


介紹
不可或缺 Windows Native 之 C++

  • 文件



示例
CppIO2.h

#pragma once 

#include <string>

using namespace std;

namespace NativeDll
{
    class CppIO2
    {
    public:
        string Demo(string rootPath);
    };
}


CppIO2.cpp

/*
 * 文件
 */

#include "pch.h" 
#include "CppIO2.h" 

#include <fstream> // ifstream(繼承自istream), ofstream(繼承自ostream)

using namespace NativeDll;

void cppio2_demo1();
void cppio2_demo2();
void cppio2_demo3();
void cppio2_demo4();

string _rootPath;

string CppIO2::Demo(string rootPath)
{
    _rootPath = rootPath;

    // 寫入文本文件
    cppio2_demo1();

    // 讀取文本文件
    cppio2_demo2();

    // 寫入二進制文件
    cppio2_demo3();

    // 讀取二進制文件
    cppio2_demo4();
    

    return "演示文件的保存路徑:" + _rootPath;
}



// 寫入文本文件
void cppio2_demo1()
{
    string fileName = _rootPath + "\\cpp_file_demo1.txt";

    // 打開文件
    // ofstream outfile;
    // outfile.open(fileName, ios::out);

    // 打開文件也可以這樣寫
    ofstream outfile(fileName, ios::out); // 第 2 個參數是文件的輸入輸出方式(多個用“|”分隔),其說明參見後面的注釋
    // 如果既想寫又想讀就用 fstream

    if (!outfile) // 如果文件打開失敗,返回值為 0
    {
        // err
    }

    for (int i = 0; i < 3; i++)
    {
        // 寫入文本數據
        outfile << "abc" << "\n";
    }   

    // 格式化寫入的文本數據
    outfile << hex << 100 << std::endl; // 關於格式化請參見:CppIO1.cpp

    // 關閉文件
    outfile.close();       
}



// 讀取文本文件
void cppio2_demo2()
{
    string fileName = _rootPath + "\\cpp_file_demo1.txt";

    char buf[1024];
    string result;
    ifstream infile(fileName, ios::in);  // 第 2 個參數是文件的輸入輸出方式(多個用“|”分隔),其說明參見後面的注釋
    // 如果既想寫又想讀就用 fstream

    // 文件打開成功,說明這個文件之前是存在的
    if (infile.is_open())
    {
        // 返回下一個字符,但是文件內部位置指針不變
        char c = infile.peek(); // 如果返回的字符是文件結束符,則其值為 EOF

        // 文件正常,且文件內部位置指針不在結尾
        while (infile.good() && !infile.eof()) // eof - end of line
        {
            memset(buf, 0, 1024); // 清空 buf
            infile.getline(buf, 1204); // 讀當前文件內部位置指針所指的一行數據給 buf, 然後文件內部位置指針指向下一行

            result += buf;
            result += "\n";
        }

        infile.close();
    }
}



// 寫入二進制文件
void cppio2_demo3()
{
    struct employee
    {
        int num;
        char name[32];
    } w[3] = { { 100, "wanglei" }, { 200, "webabcd" }, { 300, "diandian" } };

    string fileName = _rootPath + "\\cpp_file_demo2.b";
    ofstream outfile(fileName, ios::binary); // 第 2 個參數是文件的輸入輸出方式(多個用“|”分隔),其說明參見後面的注釋
    // 如果既想寫又想讀就用 fstream
    if (!outfile)
    {
        // err
    }

    for (int i = 0; i < 3; i++)
    {
        // 寫入數據(要將地址轉換為 char* 類型指針)
        outfile.write((char *)&w[i], sizeof(w[i]));
    }

    outfile.close();
}



// 讀取二進制文件
void cppio2_demo4()
{
    struct employee
    {
        int num;
        char name[32];
    } r[2];

    string fileName = _rootPath + "\\cpp_file_demo2.b";
    ifstream infile(fileName, ios::binary); // 第 2 個參數是文件的輸入輸出方式(多個用“|”分隔),其說明參見後面的注釋
    // 如果既想寫又想讀就用 fstream
    if (!infile)
    {
        // err
    }

    // 移動文件內部位置指針。關於文件內部位置指針的操作函數請參見後面的注釋
    infile.seekg(sizeof(employee), ios::cur);

    for (int i = 0; i < 2; i++)
    {
        // 讀取數據(要將地址轉換為 char* 類型指針)
        infile.read((char *)&r[i], sizeof(r[i]));
    }

    infile.close();
}



/*
 * 文件的輸入輸出方式:
 *
 * ios::in - 以輸入方式打開文件
 * ios::out -以輸出方式打開文件(這是默認方式),如果已有此名字的文件,則將其原有內容全部清除
 * ios::app - 以輸出方式打開文件,寫入的數據添加在文件末尾
 * ios::ate - 打開一個已有的文件,文件指針指向文件末尾
 * ios::trunc - 打開一個文件,如果文件已存在,則刪除其中全部數據,如文件不存在,則建立新文件。如已指定了 ios::out 方式,而未指定 ios::app, ios::ate, ios::in, 則同時默認此方式
 * ios::binary - 以二進制方式打開一個文件,如不指定此方式則默認為 ASCII 方式
 * ios::in | ios::out - 以輸入和輸出方式打開文件,文件可讀可寫
 * ios::out | ios::binary - 以二進制方式打開一個輸出文件
 * ios::in | ios::binar - 以二進制方式打開一個輸入文件
 */



/*
 * 文件內部位置指針的操作函數:
 *
 * gcount() - 返回最後一次輸入所讀入的字節數
 * tellg() - 返回輸入文件指針的當前位置
 * seekg(文件中的位置) - 將輸入文件中指針移到指定的位置
 * seekg(位移量, 參照位置) - 以參照位置為基礎移動若干字節
 * tellp() - 返回輸出文件指針當前的位置
 * seekp(文件中的位置) - 將輸出文件中指針移到指定的位置
 * seekp(位移量, 參照位置) - 以參照位置為基礎移動若干字節
 *
 *
 *
 * 參照位置的說明:
 * ios::beg - 文件開頭(beg 是 begin 的縮寫),這是默認值
 * ios::cur - 指針當前的位置(cur 是 current 的縮寫)
 * ios::end - 文件末尾
 */



OK
[源碼下載]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved