gpt4 book ai didi

c++ - 在 C++ 中读取和输出可能的 unicode torrent 内容?

转载 作者:行者123 更新时间:2023-11-30 04:38:36 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 C++ 程序来打开一个 torrent 文件(通过 argv[1] 传递),读取所有文件,然后逐字打印整个文件的内容而不做任何改动,它必须打印一个碳原始洪流的拷贝。问题是,一些种子文件可能包含日文、俄文等(文件名、描述等)……当然还有带有哈希和诸如此类的标准种子文件数据。

执行此操作的最佳方法是什么?到目前为止我所拥有的只输出了一部分内容,而且它似乎没有正确读取或打印数据......它是乱码或其他东西:

#include "stdafx.h" 
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

#if defined(UNICODE)
#define _tcout wcout
#else
#define _tcout cout
#endif

int _tmain(int argc, TCHAR* argv[])
{
wifstream File(argv[1]);
wstring Line;

while(!File.eof() )
{
getline(File, Line);

_tcout << Line << endl;
}
File.close();
return 0;
}

最佳答案

你在读取文件时犯了一个典型的基本错误:

while(!File.eof() )
{
getline(File, Line); // If this line fails (ie you reach EOF)
// Then you still print out the Line (whoes value is undefined)

_tcout << Line << endl;
}

请记住,倒数第二个 getline 将读取(但不包括)EOF。最后一次调用将只读取 EOF。这个错误通常意味着上面的循环将最后一行打印两次(取决于 Line 的设置方式)。

真正的解决方案是将 getline 放到 while 中。

while(getline(File, Line))
{
_tcout << Line << endl;
}

如果 getline() 读取 EOF,则它会在文件中设置一个标志。 getline() 的结果是对流对象(文件)的引用,当它在 bool 上下文中使用时,它被转换为一个值,如果一切正常则可转换为 true,如果出现问题则为 false(如 EOF) .这意味着当您到达 EOF 时不会进入循环体。

您需要注意的另一件事是终端的属性和文件的格式。如果不匹配,则看起来显示的字符不匹配。

关于c++ - 在 C++ 中读取和输出可能的 unicode torrent 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3080858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com