我正在尝试将一些旧的C ++代码转换为C#,并且难以理解以下代码的作用以及如何将其转换为C#。
ifstream fin;
fin.open(file, ios::nocreate);
if (!fin)
{
m_iErrorNumber = 1567;
num = 0.0;
}
else
{
for (int x = 0; x < count; x++)
{
fin >> num; // <==== THIS LINE IS PROBLEM!!
}
};
fin.close();
答案 0 :(得分:3)
C ++标准库分别将bitshift运算符(<<
和>>
)重载为“写入流”和“从流读取”。在这种情况下,fin
是一个文件流; fin >> num
表示从文件中读取(直到下一个空白字符),解析数据以匹配变量num
(整数)的格式,并将其存储到num
。< / p>
答案 1 :(得分:2)
这可能与C ++代码略有不同,但应该相对类似:
IEnumerable<string> ReadWhiteSpaceSeparated(string filename)
{
using(var lines = File.ReadLines(filename))
{
return lines.SelectMany(line => line.Split(new []{' ','\t', '\r', '\n'}, StringSplitOptions.RemoveEmptyEntries));
}
}
IEnumerable<string> ReadDoubles(string filename)
{
return ReadWhiteSpaceSeparated(filename)
.Select(s => double.Parse(s, CultureInfo.InvariantCulture));
}
然后,您可以使用count
ReadDoubles(filename).Take(count)
个双打
答案 2 :(得分:-1)
在这种情况下,&gt;&gt;运营商将数据从文件流流式传输到我认为是双倍的数据。以下是代码在C#中的外观(如果您只是使用浮点数,则将8更改为4):
using (var stream = System.IO.File.Open(file, System.IO.FileMode.Open))
{
var data = new byte[8]; // temp variable to hold byte data from stream
for(var x = 0; x < count; ++x)
{
stream.Read(data, 0, 8);
num = System.BitConverter.ToDouble(data, 0); // convert bytes to double
// do something with num
}
}