Table of Contents
Previous Section Next Section

open

#include <fstream.h>void open(const char *filename, int mode,          int access=filebuf::openprot);

The open( ) function is a member of fstream, ifstream, and ofstream.

A file is associated with a stream by using the open( ) function. Here, filename is the name of the file, which may include a path specifier. The value of mode determines how the file is opened. It must be one (or more) of these values:

ios::app
ios::ate
ios::binary
ios::in
ios::nocreate
ios::noreplace
ios::out
ios::trunc

You can combine two or more of these values by ORing them together.

Programming Tip 

To read from or write to a text file, you simply use the << and >> operators with the stream you opened. For example, the following old-style program writes an integer, a floating-point value, and a string to a file called “test” and then reads them back:

// This is an old-style program.
#include <iostream.h>
#include <fstream.h>
 
int main()
{
  ofstream out("test");
  if(!out) {
    cout << "Cannot open file.\n";
    return 1;
  }

  // output data
  out << 10 << " " << 123.23 << "\n";
  out << "This is a short text file.\n";
  out.close();

  // now, read it back
  char ch;
  int i;
  float f;
  char str[80];

  ifstream in("test");
  if(!in) {
    cout << "Cannot open file.\n";
    return 1;
  }

  in >> i;
  in >> f;
  in >> ch;
  in >> str;

  cout << "Here is the data: ";
  cout << i << " " << f << " " << ch << "\n";
  cout << str;

  in.close();

  return 0;
}

When reading text files using the >> operator, keep in mind that certain character translations occur. For example, whitespace characters are omitted. If you want to prevent any character translations, you must open the file for binary I/O and use the binary I/O functions.

Including ios::app causes all output to that file to be appended to the end. This value can only be used with files capable of output. Including ios::ate causes a seek to the end of the file to occur when the file is opened. Although ios::ate causes a seek to the end of file, I/O operations can still occur anywhere within the file.

The ios::binary value causes the file to be opened for binary I/O operations. By default, files are opened in text mode.

The ios::in value specifies that the file is capable of input. The ios::out value specifies that the file is capable of output. However, creating a stream using ifstream implies input, and creating a stream using ofstream implies output, so in these cases it is unnecessary to supply these values.

The ios::trunc value causes the contents of a preexisting file by the same name to be destroyed and the file is truncated to zero length.

Including ios::nocreate causes the open( ) function to fail if the file does not already exist. The ios::noreplace value causes the open( ) function to fail if the file already exists and ios::ate or ios::app is not also specified.

The value of access determines how the file can be accessed. Its default value is filebuf::openprot (filebuf is a base class of the file classes), which means a normal file. Check your compiler's documentation for other legal values of access.

When opening a file, both mode and access will default. When opening an input file, mode will default to ios::in. When opening an output file, mode will default to ios::out. In either case, the default for access is a normal file. For example, this opens a file called “test” for output:

out.open("test"); // defaults to output and normal file

To open a stream for input and output, you must usually specify both the ios::in and the ios::out mode values, as shown here:

mystream.open("test", ios::in | ios::out);

For many compilers, no default value for mode is supplied when opening read/write files.

In all cases, if open( ) fails, the stream will be zero. Therefore, before using a file, you should test to make sure that the open operation succeeded.

Related functions are close( ), fstream( ), ifstream( ), and ofstream( ).


Table of Contents
Previous Section Next Section