1

我无法将 UTF8 编码的文件读入wchar_t缓冲区,因为我事先不知道文件大小。

有谁知道我如何读取缓冲区中的整个文件?

我想我必须保留一个wchar_t *(指针)并在阅读时调整它的大小。然而,这听起来很可怕,因为我以前从未调整过指针的大小。

我正在使用 Microsoft Visual Studio 进行 Windows C++ 编程。

4

2 回答 2

2

您是否考虑过使用矢量?

#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());
于 2012-04-07T19:38:37.107 回答
0

如果要分配文件大小的缓冲区,首先需要找到文件大小。为此,您使用适当的参数调用 stat() 函数,它会填充包含文件大小的字段。

假设您将该大小存储在变量中filesize

那么你就可以

wchar_t *buffer = reinterpret_cast< wchar_t * >new char [ filesize ];

然后在调用 open() 以获取文件描述符之后使用 read() 将整个文件读入该缓冲区,或者在调用 fopen() 以获取 FILE * 之后使用 fread() 将整个文件读入该缓冲区。

于 2012-04-07T19:39:09.190 回答