- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一段代码可以将 .txt 文件的内容读入字符串。
std::ifstream file("address.txt");
std::string oldAddress((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
如果我改用 std::wstring
自然它也可以工作,就像这样:
std::wifstream file("address.txt");
std::string oldAddress((std::istreambuf_iterator<wchar_t>(file)), std::istreambuf_iterator<wchar_t>());
这是我的问题:假设我不知道字符集是 Unicode 还是多字节,我希望我的代码足够通用以处理这两个选项。为了获取基于 TCHAR
的字符串概念,使用 istreambuf_iterator 的最佳方式是什么?
这是我的尝试,有效,但我想知道是否真的有必要创建这些 typedef。
typedef std::basic_ifstream<TCHAR> tifstream;
typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR>> tstring;
tifstream file("address.txt");
tstring oldAddress((std::istreambuf_iterator<TCHAR>(file)), std::istreambuf_iterator<TCHAR>());
提前致谢!
最佳答案
如果你想处理你的库不支持的新字符类型(在本例中是 MSVCRT),除了与你的字符类型相关的常规 typedef 之外,你还应该提供一个字符特征。
字符类型的 char_traits 很重要,如果没有比较、长度和其他静态专门用于字符的例程将无法工作,您将面临不良行为。
确保您专门针对 TCHAR 的 char_traits 模板
template<>
struct char_traits<TCHAR>
{
关于c++ - istreambuf_iterator<TCHAR> 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879344/
我想在一个文本文件中查找行数,但是在执行istreambuf_iterator 后我无法读取内容。 std::ifstream loadfile("file.txt"); line_count = s
基于这个问题:C++ streams confusion: istreambuf_iterator vs istream_iterator?在 istreambuf_iterator ,我的理解是is
istreambuf_iterator 什么时候抛出异常?当底层流试图读取一个目录时,我收到一个异常,但在其他情况下没有。具体来说,我从 Jan-Philip Gehrcke 的 blog 中获取了脚
在标准中我读到你必须创建一个默认迭代器才能知道迭代器是否已经到达流的末尾。我认为它变得非常丑陋,难道没有任何预定义的符号或等效符号可以帮助我们吗? The default-constructed st
我们可以将整个文件读入一个字符串: std::ifstream ifs(path); assert(ifs.good()); std::string text(std::istreambuf_iter
我正在使用以下代码(使用命名空间 std)将文件内容转换为字符串。 代码 1 string fileToString(const string& filename) { ifstream fi
我有一段代码可以将 .txt 文件的内容读入字符串。 std::ifstream file("address.txt"); std::string oldAddress((std::istreamb
我正在阅读 Constructing a vector with istream_iterators这是关于将完整的文件内容读入字符 vector 。虽然我希望将文件的一部分加载到字符 vector
代码如下: #include #include #include #include std::vector bytes; { std::ifstream in(name, std::i
我尝试将二进制文件内容的一部分读入字符串。为什么是字符串?我的消息协议(protocol)(使用 protobuf)需要这个。 下面的效果很好: std::string* data = new std
以下是an example from cppreference.com , The Code is: #include #include #include #include int main(
istreambuf_iterator 和 istream_iterator 有什么区别。 对于下面的代码: istream_iterator cin_in(cin); istream_itera
我已经使用 从流中一个一个地提取字符,以构造对象。 最终,我的目标是能够使用 istream_iterator 遍历流并将每个对象插入 vector .非常标准,除了我无法获得 istream_ite
istreambuf_iterator 和 istream_iterator 有什么区别?一般来说,流和流缓冲区有什么区别?我真的找不到任何明确的解释,所以决定在这里问。 最佳答案 IOstreams
许多程序员可能会混淆以下代码: int main() { std::ifstream ifs("filename", std::ios::binary); std::string conten
我需要读取一个包含标题和数据的二进制文件(一次性)。在 C++ 中有多种读取文件的方法,我想知道哪种方法最快、更可靠。我也不知道 reintrerpret_cast 是否是将原始数据转换为结构的最佳方
我正在尝试读取一个充满 std::complex 的二进制文件.我尝试了以下代码,as suggested in this SO answer : #include #include #inclu
我无法编译(非常做作)C++ ranges example : #include #include #include template auto populate(R&& range) {
我有以下代码: std::ifstream ifs(fileName, std::ios_base::in | std::ios_base::binary); std::vector vecdata(
我将二进制文件读入 uchar vector ,如下所示: std::ifstream is("path", std::ios::in | std::ios::binary); std::vector
我是一名优秀的程序员,十分优秀!