C ++で関数から別の関数へのストリーム(ファイルの読み取りまたは書き込み)を開いたままにする方法はありますか?
			
			4275 次
		
4 に答える
            2        
        
		
はい、関数の外部でストリームを作成し、それをパラメーターとしてメソッドに渡すことができます。
void myFunction(ifstream &stream) {...}
後でストリームを終了したら、次のようにストリームを閉じますstream.close()。
または、最初の関数内にストリームを作成し、それを呼び出し元のメソッドに返してから、2番目の関数に渡します。
于 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ファイルストリームがmoveコンストラクター(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   に答える