场景

C++读取文件

技术点

读取文件

fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。

ifstream -- 从已有的文件读入
ofstream -- 向文件写内容
fstream - 打开文件供读写

文件打开模式:

ios::in             只读
ios::out            只写
ios::app            从文件末尾开始写,防止丢失文件中原来就有的内容
ios::binary         二进制模式
ios::nocreate       打开一个文件时,如果文件不存在,不创建文件
ios::noreplace      打开一个文件时,如果文件不存在,创建该文件
ios::trunc          打开一个文件,然后清空内容
ios::ate            打开一个文件时,将位置移动到文件尾

文件指针位置在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()    到达文件尾

按行读取文件

const int bufsize = 512;
wchar_t strbuf[bufsize];
//
while (!file_.eof())
{
    file_.getline(strbuf, bufsize);
}

String转CString

c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式

CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str(); 

CString转String

CString到std::string:

CString cs("Hello");
std::string s((LPCTSTR)cs);

由于std::string只能从LPSTR/ 构造LPCSTR,使用VC ++ 7.x或更高版本的程序员可以使用转换类,例如作为CT2CA中介。

CString cs ("Hello");
// Convert a TCHAR string to a LPCSTR
CT2CA pszConvertedAnsiString (cs);
// construct a std::string using the LPCSTR input
std::string strStd (pszConvertedAnsiString);

代码

按行读取文本文件

- 使用方式

vector<wstring> vecResult; // 文件读取的结果
wstring filename;          // 文件路径
Cpp_read_file(vecResult, filename);

- MFC

#include <fstream>
#include <iostream> 

int CMFCClistDlg::Cpp_read_file(vector<string> &result, string szFile)
{
    //清空原始值
    result.clear();

    ifstream file_(szFile.c_str(), std::ios::in);

    const int bufsize = 512;
    char strbuf[bufsize];
    // 读到文件末尾
    while (!file_.eof())
    {
        file_.getline(strbuf, bufsize);

        string sentence = strbuf;

        if (sentence.empty())
        {
            continue;
        }
        result.push_back(sentence);
    }
    file_.close();
    //如果结果值为空,返回-1
    if(result.size()<1)
    {
        return -1;
    }
    return 0;
}

参考

C++读写TXT文件中的string或者int型数据以及string流的用法

https://www.cnblogs.com/1242118789lr/p/6885691.html

如何将CString和:: std :: string :: std :: wstring互相转换?

https://stackoverflow.com/questions/258050/how-to-convert-cstring-and-stdstring-stdwstring-to-each-other

Cpp读文件、CString转String、String转CString的更多相关文章

  1. python 写文件write(string), writelines(list) ,读文件

    read()方法用于直接读取字节到字符串中,可以接参数给定最多读取的字节数,如果没有给定,则文件读取到末尾. readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节),然后整行,包 ...

  2. 头文件string.h,cstring与string

    string.h string.h是一个C标准头文件,所有的C标准头文件都形如name.h的形式,通过#include <string.h>可以导入此头文件.之后我们就可以在程序中使用st ...

  3. <string> 与<string.h>、<cstring>的区别

    <string.h> <string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <cstring> 在C++标准化(1998年 ...

  4. string string.h=cstring=str

    <string.h> <string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <cstring> 在C++标准化(1998年 ...

  5. C/C++ - <string> 与<string.h>、<cstring>的区别

    <string.h><string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <string><string>是C ...

  6. 【转】<string> <string.h> <cstring>的区别

    #include < string.h > void main() { string aaa = " abcsd d " ; printf( " lookin ...

  7. CString转char * ,string

    CString头文件#include <afx.h> string头文件#include <string.h> 1.CString转char * CString cstr; c ...

  8. string string.h cstring 区别

    c++中 string与string.h 的作用和区别 #include  <string.h>  void  main()  {        string  aaa=  "a ...

  9. C++中cstring.h和string.h的区别

    转载:https://blog.csdn.net/qian_chun_qiang/article/details/80648691 1.string与cstring有什么区别 <string&g ...

随机推荐

  1. day12 max min zip 用法

    max min ,查看最大值,最小值 基础玩法 l = [1,2,3,4,5] print(max(l)) print(min(l)) 高端玩法 默认字典的取值是key的比较 age_dic={'al ...

  2. Linux 系统免密码登陆远程服务器

    在当前Linux生成公钥私钥ssh-keygen公钥私钥存放路径为:~/root/.ssh/id_rsa id_rsa.pub 登陆被远程主机,进入目录~/root/.ssh/是否存在authoriz ...

  3. 关于打包测试环境,百度地图报 Bmap not undefined

    https的网站使用百度地图,如果你引用的地址没写对的话,加载不出来百度地图,被认为是不安全的JS内容. https://api.map.baidu.com/api?+你的秘钥+&s=1 应该 ...

  4. 二分图判定 POJ-2492

    这是由AC代码改的模板,不能直接交啊 #include<iostream> #include<vector> #include<cstring> using nam ...

  5. 自己的Promise

    废话不多说,直接上代码: class Promise2{ constructor(fn){ const _this=this; //重点 this.__queue=[]; this.__succ_re ...

  6. H5新特性之canvas

    canvas无疑是H5之中最受欢迎的新特性了,它可以让浏览毫无费力的画出各种图案,动画. canvas的性能不会因为画布上的图案多少而改变,因此做动画用canvas性能也相当优秀. canvas最基本 ...

  7. FastDFS整合nginx后,nginx一直报错

    FastDFS整合nginx后,nginx一直报错: 报错内容: [2018-06-11 09:41:21] ERROR - file: ../common/fdfs_http_shared.c, l ...

  8. 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法

    参考原贴地址:https://blog.csdn.net/clementad/article/details/47339519 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Trans ...

  9. Math.random()和UUID.randomUUID().toString()性能对比【纯原】

    Math.random()和UUID.randomUUID().toString()性能对比 不言而喻,因为Math.random()不需要保证唯一性,所做的操作远比UUID消耗更小的性能, 在部分要 ...

  10. LightOJ - 1246 Colorful Board(DP+组合数)

    http://lightoj.com/volume_showproblem.php?problem=1246 题意 有个(M+1)*(N+1)的棋盘,用k种颜色给它涂色,要求曼哈顿距离为奇数的格子之间 ...