代码
创建一个文件,用二进制的方式将字符串写入文件中
FileStream fs("test.txt", FileMode::Create);
string str("测试文本");
fs.Write((uint8_t *)str.c_str(), 0, str.length());
return 0;
其中 FileStream
是我对 fstream 的封装。
打开文本文件
文本正常显示。看右下角的编码方式
可以看出编码方式是 utf8. 编码方式可能与编辑器所用的字符编码方式有关。例如
const char* str = "测试文本";
编译器会将源代码文件的这个字符串的字节原封不动地放到可执行文件中,所以你的编辑器用的是什么编码格式,运行时 const char* 里面储存的就是什么编码格式的字符串。
读取刚才创建的文件
FileStream fs("test.txt", FileMode::Open);
uint64_t buf_length = fs.Length() + 1;
uint8_t *read_buf = new uint8_t[buf_length];
for (int i = 0; i < buf_length; i++)
read_buf[i] = 0;
fs.set_Position(3);
int have_read = fs.Read(read_buf, 0, buf_length);
cout << "have_read=" << have_read << endl;
cout << string((char *)(read_buf)) << endl;
delete[] read_buf;
return 0;
通过 set_Position
方法将位置设置到第 3 个字节(这里的索引号从 0 开始),结果如下
可以看出一个中文占了 3 个字节。
改成 fs.set_Position(6);
后,结果如下