如何在Win32上的wchar_t缓冲区中读取整个文件?

时间:2012-04-07 19:26:40

标签: c++ visual-studio file buffer

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

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

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

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

2 个答案:

答案 0 :(得分:2)

您是否考虑过使用矢量?

#include <vector>
#include <fstream>
#include <iterator>

:::

std::ifstream in(file_name);

//Will automatically reallocate to the require size
std::vector<wchar_t> store(
    std::istream_iterator<wchar_t>(in),
    std::istream_iterator<wchar_t>());

//to access wchar_t* you can call data();
my_func(store.data());

答案 1 :(得分:0)

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

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

然后你可以

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

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