我试图在缓冲区中以二进制模式从文件中读取64000个字节,直到文件结束。我的问题是tellg()以十六进制值返回位置,如何让它返回十进制值? 因为我的if条件不起作用,它的读数超过64000,当我重新定位我的pos和size_stream时(size_stream = size_stream - 63999; pos = pos + 63999;),每次都指向错误的位置。
如何一次性将文件中的64000字节从二进制模式读入缓冲区直到文件末尾?
任何帮助将不胜感激
static inline string <rim(string &s);
static inline string &rtrim(string &s);
static inline string &trim(string &s);
static inline string func_1(string txt,size_t start, size_t end);
static inline size_t func_2(string txt, size_t index);
static inline string replace(string& str, const string& from, const string& to);
vector<TreeItem *> parse(string dat);
答案 0 :(得分:1)
我的问题是tellg()以十六进制值
返回位置
不,它没有。它返回一个整数值。您可以以十六进制显示值,但不是以十六进制返回。
当我重新定位我的pos和size_stream(size_stream = size_stream - 63999; pos = pos + 63999;)时,它每次都指向错误的位置。
你不应该首先寻求。执行读取后,将文件放在原位置。下一次读取将从上一次读取停止的地方开始。
如何一次性将文件中的64000字节从二进制模式读入缓冲区直到文件末尾?
做一些更像这样的事情:
std::ifstream fin(file, std::ios::binary);
if (fin)
{
unsigned char buf[64000];
std::streamsize numRead;
do
{
numRead = fin.readsome(buf, 64000);
if ((!fin) || (numRead < 1)) break;
// DO NOT send binary data using `LPTSTR` string conversions.
// Binary data needs to be sent *as-is* instead.
//
SendFileContent(userKey, buf, numRead);
}
while (true);
}
或者这个:
std::ifstream fin(file, std::ios::binary);
if (fin)
{
unsigned char buf[64000];
std::streamsize numRead;
do
{
if (!fin.read(buf, 64000))
{
if (!fin.eof()) break;
}
numRead = fin.gcount();
if (numRead < 1) break;
// DO NOT send binary data using `LPTSTR` string conversions.
// Binary data needs to be sent *as-is* instead.
//
SendFileContent(userKey, buf, numRead);
}
while (true);
}