ifstream或ofstream读取二进制文本乱码问题

一:中文文件名乱码问题:

1、使用C语言的函数设置为中文运行环境
setlocale(LC_ALL,""); 
2、使用STL函数设置为系统语言环境
std::locale::global(std::locale(""));
// open file 
std::locale::global(std::locale());

二:整型或者浮点型问题(比如“1000”,输出之后就成了“1,000”)

设置输出流的local为"C"即可,利用imbue()方法。
若输出流对象为a,则
a.imbue(std::locale("C"));

示例:

#include <fstream> 
using namespace std;

bool Process(const char* dest,const char* src,LONG Offset,LONG Length)
{
    locale::global(locale(""));
    ifstream fin(src,ios::binary);
    if(!fin)
    {
        return false;
    }
    fin.seekg(Offset);
    ofstream fout(dest,ios::binary);
    char* pbuf;
    if (Length>0)
    {
        pbuf = new char[Length];
    }
    fin.imbue(locale("C"));
    fin.read(pbuf,Length);
    fout.write(pbuf,fin.gcount());
    if (Length>0)
    {
       delete []pbuf;
    }
    fin.close();
    fout.close();
    locale::global(locale()); 
    return true;
}

使用ifstream读取二进制文件的步骤如下: 1. 包含头文件:`#include <fstream>` 2. 创建流对象:`ifstream ifs;` 3. 打开文件:`ifs.open("filename", ios::in | ios::binary);` 4. 判断文件是否打开成功:`ifs.is_open();` 5. 读取文件:定义一个字符数组作为缓冲区,然后使用`ifs.read(buffer, len);`方法来读取文件内容。 6. 处理读取到的内容,例如输出到控制台或进行其他操作。 7. 关闭文件:`ifs.close();` 下面是一个示例代码: ```cpp #include <iostream> #include <fstream> int main() { std::ifstream ifs("filename", std::ios::in | std::ios::binary); if (!ifs.is_open()) { std::cout << "文件打开失败" << std::endl; return 0; } char buffer<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [c++文件操作4之二进制读取文件](https://blog.csdn.net/m0_53157173/article/details/113539080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++二进制文件读写操作](https://blog.csdn.net/luoganttcc/article/details/123073388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值