1 / 50

Lecture 33: Using File I/O

CSC 107 – Programming For Science. Lecture 33: Using File I/O. Today’s Goal. Get familiar with opening & closing files Declaring variables for use with files Using variables to open files for reading & writing Closing files and understand why you should do so

nen
Download Presentation

Lecture 33: Using File I/O

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSC 107 – Programming For Science Lecture 33: Using File I/O

  2. Today’s Goal • Get familiar withopening & closing files • Declaring variables for use with files • Using variables to open files for reading & writing • Closing files and understand why you should do so • Understand what it means: ALL I/O is file I/O • Common bugs to avoid when coding with files in C++ • Get a better understanding of what >> & << do • cin, cout are variables: know what their types are

  3. Image To Sharpen • I have a (fuzzy) 1024 x 768 picture to sharpen • Only 786,432 numbers to type in to yesterday's lab • Will also need to click each pixel to update with result

  4. More Data Entry Positions • Testing improved jet designs for oeingB-ay • Using program to simulate designs' lift & drag • 5 possible designs (each 150MB) to test this iteration • Once results available, will tweak & retest designs • Need room of touch typists for all this data entry

  5. This Is (Semi-Real) Problem • Large hadron collider eventuallywork as designed • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty

  6. This Is (Semi-Real) Problem • Large hadron collider eventuallywork as designed • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty • Hired trained monkeys to type all 244,813,135,872 bits

  7. This Is (Semi-Real) Problem • Large hadron collider eventuallywork as designed • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty • Hired trained monkeys to type all 244,813,135,872 bits college students

  8. Yeah, Right • Real world demands we use files for most I/O • Data files used to start and/or end most projects • May contain: game levels, analysis results, CCD pics • Way to read & write files needed to be useful

  9. Program Basics For Files • All built-in file I/O code means adding to header #include <fstream> • Place with other #includes to use files in program • Even if no files are used, no cost to adding this line • Must specify namespace of file I/O code, also • If you really want, this can do this individually but… using namespace std; …much easier and probably habit by now anyway

  10. Opening a File • To use file, we need variable to use in program • Numbers, cStrings, and booleansmixed in the file • Previous type (& arrays) do not make sense to use • C++ provides new types to refer to file itself

  11. Types Used For Files • Within program, may use file in 2 possible ways • To read file, ifstream variables will be needed • Need variable of type ofstreamto write to file

  12. File Variable Declaration • Types are new, but still just declaring variables • Requires type &name of variable being declared • Names for human use; normal scoping rules apply • Cannot assign variablesbut can use as parameters • Cannot use in equations: files are NOT numbers ofstreamfout; ifstream fin; ofstream bob, bill, babs, barb; ifstreamthisIsAFileVariable; ofstream monkey = "foo.txt"; ifstreamfourFile = 4;

  13. File Variable Declaration • Types are new, but still just declaring variables • Requires type &name of variable being declared • Names for human use; normal scoping rules apply • Cannot assign variablesbut can use as parameters • Cannot use in equations: files are NOT numbers ofstreamfout; ifstream fin; ofstream bob, bill, babs, barb; ifstreamthisIsAFileVariable; ofstream monkey = "foo.txt"; ifstreamfourFile = 4;

  14. File Variable Declaration • Types are new, but still just declaring variables • Requires type &name of variable being declared • Names for human use; normal scoping rules apply • Cannot assign variablesbut can use as parameters • Cannot use in equations: files are NOT numbers ofstreamfout; ifstream fin; ofstream bob, bill, babs, barb; ifstreamthisIsAFileVariable; ofstream monkey = "foo.txt"; ifstreamfourFile = 4;

  15. Name That File • Two ways to open a file once we have the name • No matter which used, must know name of file • Defaults to current directory, if only a name specified • By including in name, can use other directories • No standard way to do this – depends on the OS

  16. Name That File • Two ways to open a file once we have the name • No matter which used, must know name of file • Defaults to current directory, if only a name specified • By including in name, can use other directories • No standard way to do this – depends on the OS

  17. Opening the File • Can open file when variable declared char nameLoc[] = "bobbobbob";char sndName[] = "csi.txt";ifstreamfin("image.dat");ofstreamfout(nameLoc);ifstreambobism(sndName);ofstreamcookies(“nomnomnom.txt"); • Even after declaration, files can be opened ifstreambecause;ofstreamisaidso;because.open("mightMakes.right");cin >> sndName;isaidso.open(sndName);

  18. Did I Do Good? • May not always be successful opening a file • Cannot open and read file that does not exist • May not have permission to access a certain file • Cannot do impossible & write to nonexistent drive • Use built-in is_open function to check this • Called in manner similar to cout functions like setf • If variable attached to open file, function returns true • Returns false if variable not used to open file, yet • If attempt to open file fails, will also return false

  19. Examples of is_open char sndName[];ifstreambecause, foo("foo.txt");ofstreamisaidso, bar("snafu");cout << because.is_open() << endl;cout << foo.is_open() << endl;cout << bar.is_open() << endl;because.open("mightMakes.right");cin >> sndName;isaidso.open(sndName);cout << because.is_open() << endl;cout << isaidso.is_open() << endl;

  20. Upon Opening The Location Is… • Once open, read & write from start of file • As logical a choice as any other location to start at • If reading, can start getting all data from file • When writing to existing file what will happen?

  21. Oops!

  22. Opening a File • Within program, may use file in 2 possible ways • To read file, ifstream variables will be needed • Need variable of type ofstreamto write to file

  23. Opening a File 3 • Within program, may use file in 2 possible ways • To read file, ifstream variables will be needed • Need variable of type ofstreamto write to file • Open ofstream 2 different ways depending on use ofstreamnukeIt("byebye.txt");ofstreambegone;begone.open("erasedOld.dat");ofstreamkeepIt("saved", ios::app);ofstreamfaithAlone;faithAlone.open("preserve", ios::app);

  24. Closing File • Important to close files once you are done • Program will delay saving data to make it faster • Crashes cause data loss if saves had been waiting • Until file is closed may be locked from other uses • Immediately saved on close, so insures data is safe • Can open more files if limit of open files reached ofstreamgiants("nlChamp");ifstreamyankees("evilEmpire");phillies.close();yankees.close();

  25. Today's Key Point • Because of its history, all C++ I/O is file based • Obvious when file is source of data or target of write • But also true when reading from keyboard • Writing to screen also considered file I/O

  26. Today's Key Point You've been coding with files since day 1

  27. What Are cin & cout? • Statement needed for most file I/O #include <fstream> • To use cin & coutwe must have statement: #include <iostream>

  28. What Are cin & cout? • Statement needed for most file I/O #include <fstream> • To use cin & coutwe must have statement: #include <iostream> • There is a method: similarity not an accident • cin & cout are file variables defined by system

  29. What Are cin & cout? • Statement needed for most file I/O #include <fstream> • To use cin & coutwe must have statement: #include <iostream> • There is a method: similarity not an accident • cin & cout are file variables defined by system

  30. Deep in Bowels of iostream • In iostream find 2 lines to be included in code: ifstreamcin( ); ofstreamcout( ); • Already written code reading from a file • Use ifstream like cinto read ASCII text in a file • Also know how to write ASCII text to a file • As with cout,ofstreamswrites text to a file

  31. Read User's Typing With cin • Used to read one or more values at once: cin >> variable;cin >> variable1 >> variable2; • Starts where last read stopped reading input • Automatically skips past whitespace • Data type of variable determines what is read • Stops at first non-usable value found in the input • If input is not usable, will set variable equal to 0

  32. Read File W/ifstreamVariable • Used to read one or more values at once: ifstreammyFile;myFile >> variable;myFile >> variable1 >> variable2; • Starts where last read stopped reading input • Automatically skips past whitespace • Data type of variable determines what is read • Stops at first non-usable value found in the input • If input is not usable, will set variable equal to 0

  33. Print to Screen Using cout • Easy to output: print text using cout cout << “Hello World” << endl; • Prints out whatever is placed between quotes • Value of variable printed if variable not in quotes • Use escape sequences for fancier text output \n newline (move to start of next line)\t tab (go to next column that is multiple of 8) • Output using #include <iomanip>fancier

  34. Print to File With ostream • Easy to output: output via ostreamvariable ofstreamoutFile;outFile << “Hello World” << endl; • Prints out whatever is placed between quotes • Value of variable printed if variable not in quotes • Use escape sequences for fancier text output \n newline (move to start of next line)\t tab (go to next column that is multiple of 8) • Output using #include <iomanip>fancier

  35. See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain(void) {int sum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;cin>> val; while (val != -1) { sum += val;cout<< val << endl;cin>> val; } return 0;}

  36. See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain(void) {ifstream fin;ofstreamfout;int sum = 0;intval;fout<< "-1 to quit or sum nums typed" << endl;fin >> val; while (val != -1) { sum += val;fout<< val << endl;fin >> val; } return 0;}

  37. And When We Run It? #include <iostream>#include <fstream>using namespace std;intmain(void) {ifstream fin;ofstreamfout;int sum = 0;intval;fout<< "-1 to quit or sum nums typed" << endl;fin >> val; while (val != -1) { sum += val;fout<< val << endl;fin >> val; } return 0;}

  38. And When We Run It?

  39. Must Open File Before Using • How file opened unimportant, just that is open • Open when declared, by giving file name as cStringifstreambobIn("file.txt");ofstreamwhyNot(stringFromUser); • Open open later in program using open() routinebobIn.open(nameOfDataFile);whyNot.open("averagesWeCompute"); • Variable must refer to open file or else it crashes • Often add check with is_open() to protect from crashs

  40. See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain(void) {int sum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;cin>> val; while (val != -1) { sum += val;cout<< "Sum: " << val << endl;cin>> val; } return 0;}

  41. See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain() {intsum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;cin>> val; while (val != -1) { sum += val;cout<< "Sum: " << val << endl;cin>> val; }return 0;}

  42. See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain() {ifstreammyFile("numbers.txt");ofstreamyNot("sums.out");if (myFile.is_open() && yNot.is_open()) {int sum = 0;intval;yNot<< "-1 to quit or sum nums typed" << endl;myFile>> val; while (val != -1) { sum += val;yNot<< "Sum: " << val << endl;myFile>> val; } }return 0;}

  43. See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain() {ifstreammyFile("numbers.txt");ofstreamyNot("sums.out");if (myFile.is_open() && yNot.is_open()) {int sum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;myFile>> val; while (val != -1) { sum += val;yNot<< "Sum: " << val << endl;myFile>> val; } }return 0;}

  44. Variables are Variables • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function

  45. But… • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function

  46. But… • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function

  47. Butt… • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function

  48. Variables are Variables • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function PARAMETER MUST BE PASS-BY-REFERENCE

  49. Your Turn • Get into your groups and try this assignment

  50. For Next Lecture • Another use of data files in Section 17.1-17.3 • Must we use text or are there faster approaches? • What was the point of learning binary numbers? • Could we predict size of file we read/write in program? • Weekly Assignment uses Xcode this week • Submit via e-mail; CloudCoder cannot use files • Programming Assignment #3available Friday

More Related