您好我正在尝试以二进制模式-c ++读取文件,例如'sample.txt',我需要将文件文本(例如“nodeA nodeB”)存储在向量中。 例如: “A A B E A B G” 如果这是文本文件中的内容,我想以二进制形式读取它,然后将其存储在某个变量中,然后对其进行一些操作。 任何帮助,将不胜感激。 到目前为止我得到的是:
int main () {
streampos begin,end;
ifstream myfile ("example.bin", ios::binary);
begin = myfile.tellg();
myfile.seekg (0, ios::end);
end = myfile.tellg();
myfile.close();
cout << "size is: " << (end-begin) << " bytes.\n";
return 0;
}
文件myfile中的文本部分可以得到怎么样?
答案 0 :(得分:2)
您所追求的方法是ifstream::read(char *,streamsize)
。
获得文件大小(以字节为单位)后,您可以将数据读入正确大小的vector<char>
(在回到文件开头之后):
streamsize n=end-begin;
vector<char> data((size_t)n);
myfile.seekg(0,ios::beg);
myfile.read(&data[0],n);
vector<char>
的迭代器类型可能不一定是char *
指针,因此我们传递第一个参数来读取指向vector的第一个元素的指针。 std::vector
的元素保证连续布局,因此我们可以确保写入&data[0]+k
等效于&data[k]
,对于有效索引k。
答案 1 :(得分:1)
您的文件sample.txt
或其他任何内容都是文本文件。我相信
你想“以二进制形式阅读”,因为你认为你有
要做到这一点,以找出数据的大小,以便你可以
在某个变量中分配该大小的存储空间以包含数据。
在这种情况下,您真正要做的就是将文本文件读入 合适的变量,你可以非常简单地做到这一点,没有 发现文件的长度:
#include <fstream>
#include <iterator>
#include <string>
#include <algorithm>
...
std::istream_iterator<char> eos; // An end-of-stream iterator
// Open your file
std::ifstream in("sample.txt");
if (!in) { // It didn't open for some reason.
// So handle the error somehow and get out of here.
}
// Your file opened OK
std::noskipws(in); // You don't want to ignore whitespace when reading it
std::istream_iterator<char> in_iter(in); // An input-stream iterator for `in`
std::string data; // A string to store the data
std::copy(in_iter,eos,std::back_inserter(data)); // Copy the file to string
现在,sample.txt
的全部内容都在字符串data
中
无论如何你都可以解析它。您可以用某些替换std::string
其他标准容器类型char
,例如std::vector<char>
,和
这样做也会一样。