我无法将 UTF8 编码的文件读入wchar_t
缓冲区,因为我事先不知道文件大小。
有谁知道我如何读取缓冲区中的整个文件?
我想我必须保留一个wchar_t *
(指针)并在阅读时调整它的大小。然而,这听起来很可怕,因为我以前从未调整过指针的大小。
我正在使用 Microsoft Visual Studio 进行 Windows C++ 编程。
我无法将 UTF8 编码的文件读入wchar_t
缓冲区,因为我事先不知道文件大小。
有谁知道我如何读取缓冲区中的整个文件?
我想我必须保留一个wchar_t *
(指针)并在阅读时调整它的大小。然而,这听起来很可怕,因为我以前从未调整过指针的大小。
我正在使用 Microsoft Visual Studio 进行 Windows C++ 编程。
您是否考虑过使用矢量?
#include <vector>
#include <fstream>
#include <iterator>
:::
std::wifstream in(file_name);
//Will automatically reallocate to the require size
std::vector<wchar_t> store {
std::istream_iterator<wchar_t, wchar_t>(in),
std::istream_iterator<wchar_t, wchar_t>()};
//to access wchar_t* you can call data();
my_func(store.data());
如果要分配文件大小的缓冲区,首先需要找到文件大小。为此,您使用适当的参数调用 stat() 函数,它会填充包含文件大小的字段。
假设您将该大小存储在变量中filesize
。
那么你就可以
wchar_t *buffer = reinterpret_cast< wchar_t * >new char [ filesize ];
然后在调用 open() 以获取文件描述符之后使用 read() 将整个文件读入该缓冲区,或者在调用 fopen() 以获取 FILE * 之后使用 fread() 将整个文件读入该缓冲区。