title: What's the correct way to do a 'catch all' error check on an fstream output operation?
body: <p>What's the correct way to check for a general error when sending data to an fstream?</p>
  
  <p><strong>UPDATE</strong>: My main concern regards some things I've been hearing about a delay between output and any data being physically written to the hard disk. My assumption was that the command "save_file_obj &lt;&lt; save_str" would only send data to some kind of buffer and that the following check "if (save_file_obj.bad())" would not be any use in determining if there was an OS or hardware problem. I just wanted to know what was the definitive "catch all" way to send a string to a file and check to make certain that it was written to the disk, before carrying out any following actions such as closing the program.</p>
  
  <p>I have the following code...</p>
  
  <pre><code>int Saver::output()
  {
      save_file_handle.open(file_name.c_str());
      if (save_file_handle.is_open())
      {
          save_file_handle &lt;&lt; save_str.c_str();
  
          if (save_file_handle.bad())
          {
              x_message("Error - failed to save file");
              return 0;
          }
  
          save_file_handle.close();
  
          if (save_file_handle.bad())
          {
              x_message("Error - failed to save file");
              return 0;
          }
  
          return 1;
      }
      else
      {
          x_message("Error - couldn't open save file");
          return 0;
      }
  } 
  </code></pre>