0

有没有办法让 C++ 中的流(在文件中读取或写入)从一个函数打开到另一个函数?

4

4 回答 4

2

是的,您可以在函数之外创建流并将其作为参数传递给方法:

void myFunction(ifstream &stream) {...}

稍后在完成后关闭流:stream.close().

或者在第一个函数中创建流并将其返回给调用方法,然后将其传递给第二个函数。

于 2012-07-26T19:47:16.183 回答
2

通过引用传递它

void myFunction(ifstream &myStream)
于 2012-07-26T19:47:20.147 回答
1

使其成为全局变量或将其作为参数传递,但确保如果将其作为参数传递,则通过引用而不是通过值传递它!如果您按值传递它,编译器将不会抱怨并且奇怪的事情开始发生。

于 2012-07-26T19:45:56.153 回答
0

由于 C++11 文件流得到了移动构造函数 (6)。您可以使用它在函数之间传递打开的流。考虑以下代码片段:

#include <iostream>
#include <fstream>

bool open_stream(const std::wstring& filepath, std::ifstream& stream)
{
  std::ifstream innerStream;
  innerStream.open(filepath.c_str(), std::ios::in | std::ios::binary);
  if (innerStream.is_open())
  {
    stream = std::move(innerStream); // <-- Opened stream state moved to 'stream' variable 
    return true;
  }
  return false;
}  // <-- innerStream is destructed, but opened stream state is preserved as it was moved to 'stream' variable

考虑下一个代码来说明 的用法open_stream

int main()
{
  std::ifstream outerStream;
  std::wcout << L"outerStream is opened: " << outerStream.is_open() << std::endl; // <-- outerStream is opened: 0

  if (!open_stream(L"c:\\temp\\test_file.txt", outerStream))
  {
    return 1;
  }

  std::wcout << L"outerStream is opened: " << outerStream.is_open() << std::endl; // <-- outerStream is opened: 1 

  // outerStream is opened and ready for reading here

  return 0;
}
于 2019-07-04T13:53:19.467 回答