一个C++按行读取Unicode 文本文件的例子
代码
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <cwctype>
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
if (argc == 2) {
FILE *fp = NULL;
errno_t err = _wfopen_s(&fp, argv[1], L"rb,ccs=Unicode");
if (err != 0) {
cout << "open file " << argv[1] << "failed. error code: " << err << endl;
}
wchar_t buf[2048] = {0}; // 假设每一行文本不超过2048字符
size_t rdCount = fread(buf, 1, 2, fp);
if (rdCount != 2) { fclose(fp); return 1; }
if (buf[0] != 0xFF || buf[1] != 0xFE) {
fseek(fp, 0, SEEK_SET); // 测试Unicode文件标志, 没有Unicode头,跳回文件头
}
while (!feof(fp)) {
if (NULL != fgetws(buf, 2048, fp))
wcout << buf << endl;
}
fclose(fp);
}
return 0;
}
#include <windows.h>
#include <stdio.h>
#include <cwctype>
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
if (argc == 2) {
FILE *fp = NULL;
errno_t err = _wfopen_s(&fp, argv[1], L"rb,ccs=Unicode");
if (err != 0) {
cout << "open file " << argv[1] << "failed. error code: " << err << endl;
}
wchar_t buf[2048] = {0}; // 假设每一行文本不超过2048字符
size_t rdCount = fread(buf, 1, 2, fp);
if (rdCount != 2) { fclose(fp); return 1; }
if (buf[0] != 0xFF || buf[1] != 0xFE) {
fseek(fp, 0, SEEK_SET); // 测试Unicode文件标志, 没有Unicode头,跳回文件头
}
while (!feof(fp)) {
if (NULL != fgetws(buf, 2048, fp))
wcout << buf << endl;
}
fclose(fp);
}
return 0;
}
将想法付诸于实践,借此来影响他人是一个人存在的真正价值