zoukankan      html  css  js  c++  java
  • 文件:fstream,FILE,CFile,filesystem,以及路径目录

    JSON文件

    INI文件

    转载:C++读入XML文件

    转载:XML-Xercesc

    压缩文件gzip

    转载:理解open函数

    转载:C++ fstream详解

    一、C++读写文件

    中文标准库:fstream

    fstream禁止使用拷贝构造函数,如果函数的参数为fstream则需要使用std::move语句或者参数为fstream&

    1. 判断打开文件是否成功:

    if(fstream fs)

    2. 打开文件

    函数原型

    void open (const char* filename,ios_base::openmode mode = ios_base::in | ios_base::out);
    void open (const string& filename,ios_base::openmode mode = ios_base::in | ios_base::out);
    void open (const wchar_t* _Filename, ios_base::openmode mode = ios_base::in | ios_base::out, int prot = ios_base::_Openprot);
    

    参数解释

    • filename:打开的文件名

    • mode:打开文件的方式

    模式 描述
    ios::app 以追加的方式打开文件
    ios::ate 文件打开后定位到文件尾,ios:app就包含有此属性
    ios::binary 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
    ios::in 文件以输入方式打开(文件数据输入到内存)
    ios::out 文件以输出方式打开(内存数据输出到文件)
    ios::nocreate 不建立文件,所以文件不存在时打开失败
    ios::noreplace 不覆盖文件,所以打开文件时如果文件存在失败
    ios::trunc 如果文件存在,把文件长度设为0
    • prot:打开文件的属性(基本用不到)
    port值 文件属性
    0 普通文件,打开访问
    1 只读文件
    2 隐含文件
    4 系统文件

    可以用“|”或者“ + ”把以上属性连接起来,如"3"或"1 | 2"就是以只读和隐含属性打开文件

    3. 读文件:>> , get(), getline(), read()

    函数原型

    istream& getline (char* s, streamsize n );
    istream& getline (char* s, streamsize n, char delim );
    
    int      get();
    istream& get(char& c);
    istream& get(char* s, streamsize n);
    istream& get(char* s, streamsize n, char delim);
    istream& get(streambuf& sb);
    istream& get(streambuf& sb, char delim);
    

    4. 写文件:<< , put(), write()

    函数原型

    ostream& put (char c);
    
    ostream& write (const char* s, streamsize n);
    

    5. 示例代码

    #include <fstream>
    
    int main()
    {
    	std::ifstream fr;
    	std::ofstream fw;
    	char word[200];
    
    	fw.open("write.txt");
    	fr.open("read.txt");
    
    	fr >> word;                           //读取文件内容到word
    	fw << "write file test" << std::endl; //将"write file test"写到文件write.txt
    
    	fw.close();
    	fr.close();
    
    	return 0;
    }
    

    6. 设置指针位置

    seekg seekp

    7. 获取指针位置

    tellp() tellg()

    8. 读写csv文件(以逗号分隔)

    点击查看代码
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <sstream>
    
    int main(int argc, char* argv[])
    {
    	//写文件
    	std::ofstream ofs;
    	ofs.open("fruit.csv", std::ios::out); // 打开模式可省略
    	ofs << "Apple" << ',' << 5.5 << ',' << "2.2kg" << std::endl;
    	ofs << "Banana" << ',' << 4.5 << ',' << "1.5kg" << std::endl;
    	ofs << "Grape" << ',' << 6.8 << ',' << "2.6kg" << std::endl;
    	ofs.close();
    
    	//读文件
    	std::ifstream ifs("fruit.csv", std::ios::in);
    
    	std::string sub1;
    	while (std::getline(ifs, sub1, ','))
    	{
    		std::cout << sub1 << std::endl;
    	}
    
    	std::cout << "-----第二种方式------" << std::endl;
    
    	std::string line;
    	std::string sub2;
    	std::ifstream ifs2("fruit.csv", std::ios::in);  //此处需要重读一遍文件,因为前面的ifs已经读取完毕
    	while (std::getline(ifs2, line))
    	{
    		std::stringstream ss(line);
    		//std::vector<std::string> vec;可以用vector存储每一个字段,然后写到结构体中
    		while (std::getline(ss, sub2, ','))  //注意此处第一个参数为stringstream类型
    		{
    			//vec.emplace_back(sub2);
    			std::cout << sub2 << ",";
    		}
    		//struct.option = vec[0]
    		std::cout << std::endl;
    	}
    	return 0;
    }
    

    二、C读写文件

    FILE是C的标准文件读写

    1. 打开文件 : fopen

    FILE* fopen(const char* filename, const char* mode);filename是打开或新建的文件名,mode是访问模式

    模式 描述
    r 打开一个已有的文本文件,允许读取文件。
    w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
    a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
    r + 打开一个文本文件,允许读写文件。
    w + 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
    a + 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

    二进制文件访问模式为:"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

    2.关闭文件:fclose

    int fclose(FILE * fp);

    如果成功关闭文件,fclose()函数返回,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 stdio.h 中的常量

    三、Windows或Linux读写文件

    #include <sys/stat.h>:获取文件的长度即字节数(windows和linux都可以使用,fstream和FILE都有各自获取文件长度的函数)

    WriteFile

    四、C++17 filesystem

    中文标准库:filesystem

    https://blog.csdn.net/qq_40946921/article/details/91394589

    五、程序运行时所在的目录

    #define _CRT_NONSTDC_NO_DEPRECATE //不定义该宏可以使用_getcwd(nullptr,0)获取路径
    
    #include <iostream>
    #include <direct.h> //linux下使用头文件 <unistd.h>
    
    int main()
    {
        char* path = getcwd(nullptr, 0);
        std::cout << path << '
    ';
        return 0;
    }
    
  • 相关阅读:
    Vmware安装Ubuntu ==> 连网成功
    在 ns3.25中添加 plc(电力线载波) 模块
    Ubuntu12.04下安ns3.29及Ubuntu换源方法
    微信支付小程序版
    微信小程序打开外部链接
    linux下安装Mongodb
    延迟执行+异步 之代码分析1
    Vue入门
    实验一
    实验二
  • 原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14136211.html
Copyright © 2011-2022 走看看