Tellg和seekg以及文件读取不起作用

时间:2016-04-19 21:25:55

标签: c++ file binary

我试图在缓冲区中以二进制模式从文件中读取64000个字节,直到文件结束。我的问题是tellg()以十六进制值返回位置,如何让它返回十进制值?  因为我的if条件不起作用,它的读数超过64000,当我重新定位我的pos和size_stream时(size_stream = size_stream - 63999; pos = pos + 63999;),每次都指向错误的位置。

如何一次性将文件中的64000字节从二进制模式读入缓冲区直到文件末尾?

任何帮助将不胜感激

static inline string &ltrim(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);

1 个答案:

答案 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);
}