2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1...
-
Upload
mabel-dennis -
Category
Documents
-
view
218 -
download
1
Transcript of 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1...
![Page 1: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/1.jpg)
2002 Prentice Hall. All rights reserved.
1
Chapter 17 – Files and Streams
Outline17.1 Introduction17.2 Data Hierarchy17.3 Files and Streams17.4 Classes File and Directory17.5 Creating a Sequential-Access File17.6 Reading Data from a Sequential-Access File17.7 Random-Access Files17.8 Creating a Random-Access File17.9 Writing Data Randomly to a Random-Access File17.10 Reading Data Sequentially from a Random-Access File17.11 Case Study: A Transaction-Processing Program
![Page 2: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/2.jpg)
2002 Prentice Hall. All rights reserved.
2
17.2 Data Hierarchy
Fig. 17.1 Data hierarchy.
Randy Red
Iris Orange
Judy Green
Tom Blue
Sally Black
file
Judy Green record
Judy Field
01001010 byte (ASCII for J)
1 bit
![Page 3: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/3.jpg)
2002 Prentice Hall. All rights reserved.
3
17.2 Data Hierarchy
Fig. 17.2 C#’s view of an n-byte file.
1 2 3 4 5 6 7 8 9 n - 1……
end of file marker
![Page 4: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/4.jpg)
2002 Prentice Hall. All rights reserved.
4
17.4 Classes File and Directory
static Method Description
AppendText Returns a StreamWriter that appends to an existing file or creates a file if one does not exist.
Copy Copies a file to a new file.
Create Creates a file and returns its associated FileStream.
CreateText Creates a text file and returns its associated StreamWriter.
Delete Deletes the specified file.
GetCreationTime Returns a DateTime object representing the time that the file was created.
GetLastAccessTime Returns a DateTime object representing the time that the file was last accessed.
GetLastWriteTime Returns a DateTime object representing the time that the file was last modified.
Move Moves the specified file to a specified location.
Open Returns a FileStream associated with the specified file and equipped with the specified read/write permissions.
OpenRead Returns a read-only FileStream associated with the specified file.
OpenText Returns a StreamReader associated with the specified file.
OpenWrite Returns a read/write FileStream associated with the specified file.
Fig. 17.3 File class methods (partial list).
![Page 5: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/5.jpg)
2002 Prentice Hall. All rights reserved.
5
17.4 Classes File and Directory
static Method Description
CreateDirectory Creates a directory and returns its associated DirectoryInfo.
Delete Deletes the specified directory.
Exists Returns true if the specified directory exists; otherwise, it returns false.
GetLastWriteTime Returns a DateTime object representing the time that the directory was last modified.
GetDirectories Returns a string array representing the names of the subdirectories in the specified directory.
GetFiles Returns a string array representing the names of the files in the specified directory.
GetCreationTime Returns a DateTime object representing the time that the directory was created.
GetLastAccessTime Returns a DateTime object representing the time that the directory was last accessed.
GetLastWriteTime Returns a DateTime object representing the time that items were last written to the directory.
Move Moves the specified directory to a specified location.
Fig. 17.4 Directory class methods (partial list).
![Page 6: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/6.jpg)
2002 Prentice Hall.All rights reserved.
Outline6
FileTest.cs
1 // Fig 17.5: FileTest.cs2 // Using classes File and Directory.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 using System.IO;11 12 // displays contents of files and directories13 public class FileTestForm : System.Windows.Forms.Form14 {15 private System.Windows.Forms.Label directionsLabel;16 17 private System.Windows.Forms.TextBox outputTextBox;18 private System.Windows.Forms.TextBox inputTextBox;19 20 private System.ComponentModel.Container components = null;21 22 [STAThread]23 static void Main() 24 {25 Application.Run( new FileTestForm() );26 }27 28 // Visual Studio .NET generated code29 30 // invoked when user presses key31 private void inputTextBox_KeyDown(32 object sender, System.Windows.Forms.KeyEventArgs e )33 {
![Page 7: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/7.jpg)
2002 Prentice Hall.All rights reserved.
Outline7
FileTest.cs
34 // determine whether user pressed Enter key35 if ( e.KeyCode == Keys.Enter )36 {37 string fileName; // name of file or directory38 39 // get user-specified file or directory40 fileName = inputTextBox.Text;41 42 // determine whether fileName is a file43 if ( File.Exists( fileName ) )44 {45 // get file's creation date, 46 // modification date, etc.47 outputTextBox.Text = GetInformation( fileName );48 49 // display file contents through StreamReader50 try51 {52 // obtain reader and file contents53 StreamReader stream = new StreamReader( fileName );54 outputTextBox.Text += stream.ReadToEnd();55 }56 // handle exception if StreamReader is unavailable57 catch( IOException )58 {59 MessageBox.Show( "File Error", "File Error",60 MessageBoxButtons.OK, MessageBoxIcon.Error );61 }62 }63 64 // determine whether fileName is a directory65 else if ( Directory.Exists( fileName ) )66 {67 // array for directories68 string[] directoryList;
![Page 8: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/8.jpg)
2002 Prentice Hall.All rights reserved.
Outline8
FileTest.cs
69 70 // get directory's creation date, 71 // modification date, etc.72 outputTextBox.Text = GetInformation( fileName );73 74 // obtain file/directory list of specified directory75 directoryList = Directory.GetDirectories( fileName );76 77 outputTextBox.Text += 78 "\r\n\r\nDirectory contents:\r\n";79 80 // output directoryList contents81 for ( int i = 0; i < directoryList.Length; i++ )82 outputTextBox.Text += directoryList[ i ] + "\r\n";83 }84 else85 {86 // notify user that neither file nor directory exists87 MessageBox.Show( inputTextBox.Text + 88 " does not exist", "File Error", 89 MessageBoxButtons.OK, MessageBoxIcon.Error );90 }91 } // end if92 93 } // end method inputTextBox_KeyDown94 95 // get information on file or directory96 private string GetInformation( string fileName )97 {98 // output that file or directory exists99 string information = fileName + " exists\r\n\r\n";100 101 // output when file or directory was created102 information += "Created: " +103 File.GetCreationTime( fileName ) + "\r\n";
![Page 9: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/9.jpg)
2002 Prentice Hall.All rights reserved.
Outline9
FileTest.cs
104 105 // output when file or directory was last modified106 information += "Last modified: " +107 File.GetLastWriteTime( fileName ) + "\r\n";108 109 // output when file or directory was last accessed110 information += "Last accessed: " +111 File.GetLastAccessTime( fileName ) + "\r\n" + "\r\n";112 113 return information;114 115 } // end method GetInformation116 117 } // end class FileTestForm
![Page 10: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/10.jpg)
2002 Prentice Hall.All rights reserved.
Outline10
FileTest.csProgram Output
![Page 11: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/11.jpg)
2002 Prentice Hall.All rights reserved.
Outline11
FileSearch.cs
1 // Fig 17.6: FileSearch.cs2 // Using regular expressions to determine file types.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 using System.IO;11 using System.Text.RegularExpressions;12 using System.Collections.Specialized;13 14 public class FileSearchForm : System.Windows.Forms.Form15 {16 private System.Windows.Forms.Label directionsLabel;17 private System.Windows.Forms.Label directoryLabel;18 19 private System.Windows.Forms.Button searchButton;20 21 private System.Windows.Forms.TextBox outputTextBox;22 private System.Windows.Forms.TextBox inputTextBox;23 24 private System.ComponentModel.Container components = null;25 26 string currentDirectory = Directory.GetCurrentDirectory();27 string[] directoryList; // subdirectories28 string[] fileArray;29 30 // store extensions found and number found31 NameValueCollection found = new NameValueCollection();32
![Page 12: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/12.jpg)
2002 Prentice Hall.All rights reserved.
Outline12
FileSearch.cs
33 [STAThread]34 static void Main() 35 {36 Application.Run( new FileSearchForm() );37 }38 39 // Visual Studio .NET generated code40 41 // invoked when user types in text box42 private void inputTextBox_KeyDown(43 object sender, System.Windows.Forms.KeyEventArgs e )44 {45 // determine whether user pressed Enter46 if ( e.KeyCode == Keys.Enter )47 searchButton_Click( sender, e );48 49 } // end method inputTextBox_KeyDown50 51 // invoked when user clicks "Search Directory" button52 private void searchButton_Click(53 object sender, System.EventArgs e )54 {55 // check for user input; default is current directory56 if ( inputTextBox.Text != "" )57 {58 // verify that user input is valid directory name59 if ( Directory.Exists( inputTextBox.Text ) )60 {61 currentDirectory = inputTextBox.Text;62 63 // reset input text box and update display64 directoryLabel.Text = "Current Directory:" + 65 "\r\n" + currentDirectory;66 }
![Page 13: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/13.jpg)
2002 Prentice Hall.All rights reserved.
Outline13
FileSearch.cs
67 else68 {69 // show error if user does not specify valid directory70 MessageBox.Show( "Invalid Directory", "Error",71 MessageBoxButtons.OK, MessageBoxIcon.Error );72 }73 }74 75 // clear text boxes76 inputTextBox.Clear();77 outputTextBox.Clear();78 79 // search directory80 SearchDirectory( currentDirectory );81 82 // summarize and print results83 foreach ( string current in found )84 {85 outputTextBox.Text += "* Found " + 86 found[ current ] + " " + current + " files.\r\n";87 }88 89 // clear output for new search90 found.Clear();91 92 } // end method searchButton_Click93 94 // search directory using regular expression95 private void SearchDirectory( string currentDirectory )96 {97 // search directory98 try99 {100 string fileName = "";101
![Page 14: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/14.jpg)
2002 Prentice Hall.All rights reserved.
Outline14
FileSearch.cs
102 // regular expression for extensions matching pattern103 Regex regularExpression = new Regex( 104 "[a-zA-Z0-9]+\\.(?<extension>\\w+)" );105 106 // stores regular-expression-match result107 Match matchResult;108 109 string fileExtension; // holds file extensions110 111 // number of files with given extension in directory112 int extensionCount;113 114 // get directories115 directoryList =116 Directory.GetDirectories( currentDirectory );117 118 // get list of files in current directory119 fileArray = Directory.GetFiles( currentDirectory );120 121 // iterate through list of files122 foreach ( string myFile in fileArray )123 {124 // remove directory path from file name125 fileName = myFile.Substring(126 myFile.LastIndexOf( "\\" ) + 1 );127 128 // obtain result for regular-expression search129 matchResult = regularExpression.Match( fileName );130 131 // check for match132 if ( matchResult.Success )133 fileExtension = 134 matchResult.Result( "${extension}" );
![Page 15: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/15.jpg)
2002 Prentice Hall.All rights reserved.
Outline15
FileSearch.cs
135 else136 fileExtension = "[no extension]";137 138 // store value from container139 if ( found[ fileExtension ] == null )140 found.Add( fileExtension, "1" );141 else142 {143 extensionCount = Int32.Parse(144 found[ fileExtension ] ) + 1;145 146 found[ fileExtension ] = extensionCount.ToString();147 }148 149 // search for backup(.bak) files150 if ( fileExtension == "bak" )151 {152 // prompt user to delete (.bak) file153 DialogResult result =154 MessageBox.Show( "Found backup file " +155 fileName + ". Delete?", "Delete Backup",156 MessageBoxButtons.YesNo, 157 MessageBoxIcon.Question );158 159 // delete file if user clicked 'yes'160 if ( result == DialogResult.Yes )161 {162 File.Delete( myFile );163 164 extensionCount = 165 Int32.Parse( found[ "bak" ] ) - 1;166
![Page 16: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/16.jpg)
2002 Prentice Hall.All rights reserved.
Outline16
FileSearch.cs
167 found[ "bak" ] = extensionCount.ToString();168 }169 }170 }171 172 // recursive call to search files in subdirectory173 foreach ( string myDirectory in directoryList )174 SearchDirectory( myDirectory );175 }176 177 // handle exception if files have unauthorized access178 catch( UnauthorizedAccessException )179 {180 MessageBox.Show( "Some files may not be visible" +181 " due to permission settings", "Warning",182 MessageBoxButtons.OK, MessageBoxIcon.Information );183 }184 185 } // end method SearchDirectory186 187 } // end class FileSearchForm
![Page 17: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/17.jpg)
2002 Prentice Hall.All rights reserved.
Outline17
FileSearch.csProgram Output
![Page 18: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/18.jpg)
2002 Prentice Hall.All rights reserved.
Outline18
BankUI.cs
1 // Fig 17.7: BankUI.cs2 // A reusable windows form for the examples in this chapter.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 11 public class BankUIForm : System.Windows.Forms.Form12 {13 private System.ComponentModel.Container components = null;14 15 public System.Windows.Forms.Label accountLabel;16 public System.Windows.Forms.TextBox accountTextBox;17 18 public System.Windows.Forms.Label firstNameLabel;19 public System.Windows.Forms.TextBox firstNameTextBox;20 21 public System.Windows.Forms.Label lastNameLabel;22 public System.Windows.Forms.TextBox lastNameTextBox;23 24 public System.Windows.Forms.Label balanceLabel;25 public System.Windows.Forms.TextBox balanceTextBox;26 27 // number of TextBoxes on Form'28 protected int TextBoxCount = 4;29
![Page 19: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/19.jpg)
2002 Prentice Hall.All rights reserved.
Outline19
BankUI.cs
30 // enumeration constants specify TextBox indices31 public enum TextBoxIndices32 {33 ACCOUNT,34 FIRST,35 LAST,36 BALANCE37 38 } // end enum39 40 [STAThread]41 static void Main() 42 {43 Application.Run( new BankUIForm() );44 }45 46 // Visual Studio .NET generated code47 48 // clear all TextBoxes49 public void ClearTextBoxes()50 {51 // iterate through every Control on form52 for ( int i = 0; i < Controls.Count; i++ )53 {54 Control myControl = Controls[ i ]; // get control55 56 // determine whether Control is TextBox57 if ( myControl is TextBox )58 {59 // clear Text property (set to empty strng)60 myControl.Text = "";61 }62 }63 64 } // end method ClearTextBoxes
![Page 20: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/20.jpg)
2002 Prentice Hall.All rights reserved.
Outline20
BankUI.cs
65 66 // set text box values to string array values67 public void SetTextBoxValues( string[] values )68 {69 // determine whether string array has correct length70 if ( values.Length != TextBoxCount )71 {72 // throw exception if not correct length73 throw( new ArgumentException( "There must be " +74 (TextBoxCount + 1) + " strings in the array" ) );75 }76 77 // set array values if array has correct length78 else79 {80 // set array values to text box values81 accountTextBox.Text = 82 values[ ( int )TextBoxIndices.ACCOUNT ];83 firstNameTextBox.Text = 84 values[ ( int )TextBoxIndices.FIRST ];85 lastNameTextBox.Text = 86 values[ ( int )TextBoxIndices.LAST ];87 balanceTextBox.Text = 88 values[ ( int )TextBoxIndices.BALANCE ];89 }90 91 } // end method SetTextBoxValues92 93 // return text box values as string array94 public string[] GetTextBoxValues()95 {96 string[] values = new string[ TextBoxCount ];97
![Page 21: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/21.jpg)
2002 Prentice Hall.All rights reserved.
Outline21
BankUI.cs
Program Output
98 // copy text box fields to string array99 values[ ( int )TextBoxIndices.ACCOUNT ] = 100 accountTextBox.Text;101 values[ ( int )TextBoxIndices.FIRST ] = 102 firstNameTextBox.Text;103 values[ ( int )TextBoxIndices.LAST ] = 104 lastNameTextBox.Text;105 values[ ( int )TextBoxIndices.BALANCE ] = 106 balanceTextBox.Text;107 108 return values;109 110 } // end method GetTextBoxValues111 112 } // end class BankUIForm
![Page 22: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/22.jpg)
2002 Prentice Hall.All rights reserved.
Outline22
Record.cs
1 // Fig. 17.8: Record.cs2 // Serializable class that represents a data record.3 4 using System;5 6 [Serializable]7 public class Record8 {9 private int account;10 private string firstName;11 private string lastName;12 private double balance;13 14 // default constructor sets members to default values15 public Record() : this( 0, "", "", 0.0 )16 {17 }18 19 // overloaded constructor sets members to parameter values20 public Record( int accountValue, string firstNameValue,21 string lastNameValue, double balanceValue )22 {23 Account = accountValue;24 FirstName = firstNameValue;25 LastName = lastNameValue;26 Balance = balanceValue;27 28 } // end constructor29
![Page 23: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/23.jpg)
2002 Prentice Hall.All rights reserved.
Outline23
Record.cs
30 // property Account31 public int Account32 {33 get34 {35 return account;36 }37 38 set39 {40 account = value;41 }42 43 } // end property Account44 45 // property FirstName46 public string FirstName47 {48 get49 {50 return firstName;51 }52 53 set54 {55 firstName = value;56 }57 58 } // end property FirstName59
![Page 24: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/24.jpg)
2002 Prentice Hall.All rights reserved.
Outline24
Record.cs
60 // property LastName61 public string LastName62 {63 get64 {65 return lastName;66 }67 68 set69 {70 lastName = value;71 }72 73 } // end property LastName74 75 // property Balance76 public double Balance77 {78 get79 {80 return balance;81 }82 83 set84 {85 balance = value;86 }87 88 } // end property Balance89 90 } // end class Record
![Page 25: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/25.jpg)
2002 Prentice Hall.All rights reserved.
Outline25
CreateSequentialAccessFile.cs
1 // Fig 17.9: CreateSequentialAccessFile.cs2 // Creating a sequential-access file.3 4 // C# namespaces5 using System;6 using System.Drawing;7 using System.Collections;8 using System.ComponentModel;9 using System.Windows.Forms;10 using System.Data;11 using System.IO;12 using System.Runtime.Serialization.Formatters.Binary;13 using System.Runtime.Serialization;14 15 // Deitel namespace16 using BankLibrary;17 18 public class CreateFileForm : BankUIForm19 {20 private System.Windows.Forms.Button saveButton;21 private System.Windows.Forms.Button enterButton;22 private System.Windows.Forms.Button exitButton;23 24 private System.ComponentModel.Container components = null;25 26 // serializes Record in binary format27 private BinaryFormatter formatter = new BinaryFormatter();28 29 // stream through which serializable data is written to file30 private FileStream output;31
![Page 26: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/26.jpg)
2002 Prentice Hall.All rights reserved.
Outline26
CreateSequentialAccessFile.cs
32 [STAThread]33 static void Main() 34 {35 Application.Run( new CreateFileForm() );36 }37 38 // Visual Studio .NET generated code39 40 // invoked when user clicks Save button41 private void saveButton_Click(42 object sender, System.EventArgs e )43 {44 // create dialog box enabling user to save file45 SaveFileDialog fileChooser = new SaveFileDialog();46 DialogResult result = fileChooser.ShowDialog();47 string fileName; // name of file to save data48 49 // allow user to create file50 fileChooser.CheckFileExists = false;51 52 // exit event handler if user clicked "Cancel"53 if ( result == DialogResult.Cancel )54 return;55 56 // get specified file name57 fileName = fileChooser.FileName;58 59 // show error if user specified invalid file60 if ( fileName == "" || fileName == null )61 MessageBox.Show( "Invalid File Name", "Error",62 MessageBoxButtons.OK, MessageBoxIcon.Error );
![Page 27: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/27.jpg)
2002 Prentice Hall.All rights reserved.
Outline27
CreateSequentialAccessFile.cs
63 else64 {65 // save file via FileStream if user specified valid file66 try67 {68 // open file with write access69 output = new FileStream( fileName,70 FileMode.OpenOrCreate, FileAccess.Write );71 72 // disable Save button and enable Enter button73 saveButton.Enabled = false;74 enterButton.Enabled = true;75 }76 77 // handle exception if file does not exist78 catch ( FileNotFoundException )79 {80 // notify user if file does not exist81 MessageBox.Show( "File Does Not Exist", "Error",82 MessageBoxButtons.OK, MessageBoxIcon.Error );83 }84 }85 } // end method saveButton_Click86 87 // invoke when user clicks Enter button88 private void enterButton_Click(89 object sender, System.EventArgs e )90 {91 // store TextBox values string array92 string[] values = GetTextBoxValues();93 94 // Record containing TextBox values to serialize95 Record record = new Record();96
![Page 28: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/28.jpg)
2002 Prentice Hall.All rights reserved.
Outline28
CreateSequentialAccessFile.cs
97 // determine whether TextBox account field is empty98 if ( values[ ( int )TextBoxIndices.ACCOUNT ] != "" )99 {100 // store TextBox values in Record and serialize Record101 try102 {103 // get account number value from TextBox104 int accountNumber = Int32.Parse( 105 values[ ( int )TextBoxIndices.ACCOUNT ] );106 107 // determine whether accountNumber is valid108 if ( accountNumber > 0 )109 {110 // store TextBox fields in Record111 record.Account = accountNumber;112 record.FirstName =113 values[ ( int )TextBoxIndices.FIRST ];114 record.LastName =115 values[ ( int )TextBoxIndices.LAST ];116 record.Balance = Double.Parse( values[117 ( int )TextBoxIndices.BALANCE ] );118 119 // write Record to FileStream (serialize object)120 formatter.Serialize( output, record );121 }122 else123 {124 // notify user if invalid account number125 MessageBox.Show( "Invalid Account Number", "Error",126 MessageBoxButtons.OK, MessageBoxIcon.Error );127 }128 }129
![Page 29: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/29.jpg)
2002 Prentice Hall.All rights reserved.
Outline29
CreateSequentialAccessFile.cs
130 // notify user if error occurs in serialization131 catch( SerializationException )132 {133 MessageBox.Show( "Error Writing to File", "Error",134 MessageBoxButtons.OK, MessageBoxIcon.Error );135 }136 137 // notify user if error occurs regarding parameter format138 catch( FormatException )139 {140 MessageBox.Show( "Invalid Format", "Error",141 MessageBoxButtons.OK, MessageBoxIcon.Error );142 }143 }144 145 ClearTextBoxes(); // clear TextBox values146 147 } // end method enterButton_Click148 149 // invoked when user clicks Exit button150 private void exitButton_Click(151 object sender, System.EventArgs e )152 {153 // determine whether file exists154 if ( output != null )155 {156 // close file157 try158 {159 output.Close();160 }161
![Page 30: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/30.jpg)
2002 Prentice Hall.All rights reserved.
Outline30
CreateSequentialAccessFile.cs
Program Output
162 // notify user of error closing file163 catch( IOException )164 {165 MessageBox.Show( "Cannot close file", "Error",166 MessageBoxButtons.OK, MessageBoxIcon.Error );167 }168 }169 170 Application.Exit();171 172 } // end method exitButton_Click173 174 } // end class CreateFileForm
BankUI graphical user interface
![Page 31: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/31.jpg)
2002 Prentice Hall.All rights reserved.
Outline31
CreateSequentialAccessFile.csProgram Output
SaveFileDialogue
Files and directories
![Page 32: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/32.jpg)
2002 Prentice Hall.All rights reserved.
Outline32
CreateSequentialAccessFile.csProgram Output
![Page 33: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/33.jpg)
2002 Prentice Hall.All rights reserved.
Outline33
CreateSequentialAccessFile.csProgram Output
![Page 34: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/34.jpg)
2002 Prentice Hall.All rights reserved.
Outline34
CreateSequentialAccessFile.csProgram Output
![Page 35: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/35.jpg)
2002 Prentice Hall. All rights reserved.
35
17.5 Creating a Sequential-Access File
Account Number First Name Last Name Balance 100 Nancy Brown -25.54
200 Stacey Dunn 314.33
300 Doug Barker 0.00
400 Dave Smith 258.34
500 Sam Stone 34.98
Fig. 17.10 Sample data for the program of Fig. 17.9.
![Page 36: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/36.jpg)
2002 Prentice Hall.All rights reserved.
Outline36
ReadSequentialAccessFile.cs
1 // Fig. 17.11: ReadSequentialAccessFile.cs2 // Reading a sequential-access file.3 4 // C# namespaces5 using System;6 using System.Drawing;7 using System.Collections;8 using System.ComponentModel;9 using System.Windows.Forms;10 using System.Data;11 using System.IO;12 using System.Runtime.Serialization.Formatters.Binary;13 using System.Runtime.Serialization;14 15 // Deitel namespaces16 using BankLibrary;17 18 public class ReadSequentialAccessFileForm : BankUIForm19 {20 System.Windows.Forms.Button openButton;21 System.Windows.Forms.Button nextButton;22 23 private System.ComponentModel.Container components = null;24 25 // stream through which serializable data are read from file26 private FileStream input;27 28 // object for deserializing Record in binary format29 private BinaryFormatter reader = new BinaryFormatter();30 31 [STAThread]32 static void Main() 33 {34 Application.Run( new ReadSequentialAccessFileForm() );35 }
![Page 37: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/37.jpg)
2002 Prentice Hall.All rights reserved.
Outline37
ReadSequentialAccessFile.cs
36 37 // Visual Studio .NET generated code38 39 // invoked when user clicks Open button40 private void openButton_Click(41 object sender, System.EventArgs e )42 {43 // create dialog box enabling user to open file44 OpenFileDialog fileChooser = new OpenFileDialog();45 DialogResult result = fileChooser.ShowDialog();46 string fileName; // name of file containing data47 48 // exit event handler if user clicked Cancel49 if ( result == DialogResult.Cancel )50 return;51 52 // get specified file name53 fileName = fileChooser.FileName; 54 ClearTextBoxes();55 56 // show error if user specified invalid file57 if ( fileName == "" || fileName == null )58 MessageBox.Show( "Invalid File Name", "Error",59 MessageBoxButtons.OK, MessageBoxIcon.Error );60 else61 {62 // create FileStream to obtain read access to file63 input = new FileStream( fileName, FileMode.Open,64 FileAccess.Read );65 66 // enable next record button67 nextButton.Enabled = true;68 }69 70 } // end method openButton_Click
![Page 38: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/38.jpg)
2002 Prentice Hall.All rights reserved.
Outline38
ReadSequentialAccessFile.cs
71 72 // invoked when user clicks Next button73 private void nextButton_Click(74 object sender, System.EventArgs e )75 {76 // deserialize Record and store data in TextBoxes77 try78 {79 // get next Record available in file80 Record record =81 ( Record )reader.Deserialize( input );82 83 // store Record values in temporary string array84 string[] values = new string[] { 85 record.Account.ToString(),86 record.FirstName.ToString(),87 record.LastName.ToString(),88 record.Balance.ToString() };89 90 // copy string array values to TextBox values91 SetTextBoxValues( values );92 }93 94 // handle exception when no Records in file95 catch( SerializationException )96 {\97 // close FileStream if no Records in file98 input.Close(); 99 100 // enable Open Record button101 openButton.Enabled = true; 102 103 // disable Next Record button104 nextButton.Enabled = false; 105
![Page 39: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/39.jpg)
2002 Prentice Hall.All rights reserved.
Outline39
ReadSequentialAccessFile.cs
Program Output
106 ClearTextBoxes();107 108 // notify user if no Records in file109 MessageBox.Show( "No more records in file", "",110 MessageBoxButtons.OK, MessageBoxIcon.Information );111 }112 113 } // end method nextButton_Click114 115 } // end class ReadSequentialAccessFileForm
![Page 40: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/40.jpg)
2002 Prentice Hall.All rights reserved.
Outline40
ReadSequentialAccessFile.csProgram Output
![Page 41: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/41.jpg)
2002 Prentice Hall.All rights reserved.
Outline41
ReadSequentialAccessFile.csProgram Output
![Page 42: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/42.jpg)
2002 Prentice Hall.All rights reserved.
Outline42
ReadSequentialAccessFile.csProgram Output
![Page 43: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/43.jpg)
2002 Prentice Hall.All rights reserved.
Outline43
ReadSequentialAccessFile.csProgram Output
![Page 44: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/44.jpg)
2002 Prentice Hall.All rights reserved.
Outline44
CreditInquiry.cs
1 // Fig. 17.12: CreditInquiry.cs2 // Read a file sequentially and display contents based on3 // account type specified by user (credit, debit or zero balances).4 5 // C# namespaces6 using System;7 using System.Drawing;8 using System.Collections;9 using System.ComponentModel;10 using System.Windows.Forms;11 using System.Data;12 using System.IO;13 using System.Runtime.Serialization.Formatters.Binary;14 using System.Runtime.Serialization;15 16 // Deitel namespaces17 using BankLibrary;18 19 public class CreditInquiryForm : System.Windows.Forms.Form20 {21 private System.Windows.Forms.RichTextBox displayTextBox;22 23 private System.Windows.Forms.Button doneButton;24 private System.Windows.Forms.Button zeroButton;25 private System.Windows.Forms.Button debitButton;26 private System.Windows.Forms.Button creditButton;27 private System.Windows.Forms.Button openButton;28 29 private System.ComponentModel.Container components = null;30 31 // stream through which serializable data are read from file32 private FileStream input;33 34 // object for deserializing Record in binary format35 BinaryFormatter reader = new BinaryFormatter();
![Page 45: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/45.jpg)
2002 Prentice Hall.All rights reserved.
Outline45
CreditInquiry.cs
36 37 // name of file that stores credit, debit and zero balances38 private string fileName;39 40 [STAThread]41 static void Main() 42 {43 Application.Run( new CreditInquiryForm() );44 }45 46 // Visual Studio .NET generated code47 48 // invoked when user clicks Open File button49 private void openButton_Click(50 object sender, System.EventArgs e )51 {52 // create dialog box enabling user to open file53 OpenFileDialog fileChooser = new OpenFileDialog();54 DialogResult result = fileChooser.ShowDialog();55 56 // exit event handler if user clicked Cancel57 if ( result == DialogResult.Cancel )58 return;59 60 // get name from user61 fileName = fileChooser.FileName;62 63 // show error if user specified invalid file64 if ( fileName == "" || fileName == null )65 MessageBox.Show( "Invalid File Name", "Error",66 MessageBoxButtons.OK, MessageBoxIcon.Error );
![Page 46: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/46.jpg)
2002 Prentice Hall.All rights reserved.
Outline46
CreditInquiry.cs
67 else68 {69 // enable all GUI buttons, except for Open file button70 openButton.Enabled = false;71 creditButton.Enabled = true;72 debitButton.Enabled = true;73 zeroButton.Enabled = true;74 }75 76 } // end method openButton_Click77 78 // invoked when user clicks credit balances,79 // debit balances or zero balances button80 private void get_Click( object sender, System.EventArgs e )81 {82 // convert sender explicitly to object of type button83 Button senderButton = ( Button )sender;84 85 // get text from clicked Button, which stores account type86 string accountType = senderButton.Text;87 88 // read and display file information89 try90 {91 // close file from previous operation92 if ( input != null )93 input.Close();94 95 // create FileStream to obtain read access to file96 input = new FileStream( fileName, FileMode.Open,97 FileAccess.Read );98 99 displayTextBox.Text = "The accounts are:\r\n";100
![Page 47: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/47.jpg)
2002 Prentice Hall.All rights reserved.
Outline47
CreditInquiry.cs
101 // traverse file until end of file102 while ( true )103 {104 // get next Record available in file105 Record record = ( Record )reader.Deserialize( input );106 107 // store record's last field in balance108 Double balance = record.Balance;109 110 // determine whether to display balance111 if ( ShouldDisplay( balance, accountType ) )112 {113 // display record114 string output = record.Account + "\t" +115 record.FirstName + "\t" + record.LastName +116 new string( ' ', 6 ) + "\t";117 118 // display balance with correct monetary format119 output += String.Format( 120 "{0:F}", balance ) + "\r\n";121 122 // copy output to screen123 displayTextBox.Text += output; 124 }125 }126 }127 128 // handle exception when file cannot be closed129 catch( IOException )130 {131 MessageBox.Show( "Cannot Close File", "Error",132 MessageBoxButtons.OK, MessageBoxIcon.Error );133 }134
![Page 48: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/48.jpg)
2002 Prentice Hall.All rights reserved.
Outline48
CreditInquiry.cs
135 // handle exception when no more records136 catch( SerializationException )137 {138 // close FileStream if no Records in file139 input.Close(); 140 }141 142 } // end method get_Click143 144 // determine whether to display given record145 private bool ShouldDisplay( double balance, string accountType )146 {147 if ( balance > 0 )148 {149 // display credit balances150 if ( accountType == "Credit Balances" )151 return true;152 }153 154 else if ( balance < 0 )155 {156 // display debit balances157 if ( accountType == "Debit Balances" )158 return true;159 }160 161 else // balance == 0162 {163 // display zero balances164 if ( accountType == "Zero Balances" )165 return true;166 }167
![Page 49: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/49.jpg)
2002 Prentice Hall.All rights reserved.
Outline49
CreditInquiry.cs
168 return false;169 170 } // end method ShouldDisplay171 172 // invoked when user clicks Done button173 private void doneButton_Click(174 object sender, System.EventArgs e )175 {176 // determine whether file exists177 if ( input != null )178 {179 // close file180 try181 {182 input.Close();183 }184 185 // handle exception if FileStream does not exist186 catch( IOException )187 {188 // notify user of error closing file189 MessageBox.Show( "Cannot close file", "Error",190 MessageBoxButtons.OK, MessageBoxIcon.Error);191 }192 }193 194 Application.Exit();195 196 } // end method doneButton_Click197 198 } // end class CreditInquiryForm
![Page 50: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/50.jpg)
2002 Prentice Hall.All rights reserved.
Outline50
CreditInquiry.csProgram Output
![Page 51: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/51.jpg)
2002 Prentice Hall.All rights reserved.
Outline51
CreditInquiry.csProgram Output
![Page 52: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/52.jpg)
2002 Prentice Hall. All rights reserved.
52
17.7 Random-Access Files
Fig. 17.13 Random-access file with fixed-length records.
0 100 200 300 400 500
100 bytes
100 bytes
100 bytes
100 bytes
100 bytes
100 bytes
byte offsets
![Page 53: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/53.jpg)
2002 Prentice Hall.All rights reserved.
Outline53
RandomAccessRecord.cs
1 // Fig. 17.14: RandomAccessRecord.cs2 // Data-record class for random-access applications.3 4 using System;5 6 public class RandomAccessRecord7 {8 // length of firstName and lastName9 private const int CHAR_ARRAY_LENGTH = 15;10 11 private const int SIZE_OF_CHAR = 2;12 private const int SIZE_OF_INT32 = 4;13 private const int SIZE_OF_DOUBLE = 8;14 15 // length of record16 public const int SIZE = SIZE_OF_INT32 +17 2 * ( SIZE_OF_CHAR * CHAR_ARRAY_LENGTH ) + SIZE_OF_DOUBLE;18 19 // record data20 private int account;21 private char[] firstName = new char[ CHAR_ARRAY_LENGTH ];22 private char[] lastName = new char[ CHAR_ARRAY_LENGTH ];23 private double balance;24 25 // default constructor sets members to default values26 public RandomAccessRecord() : this( 0, "", "", 0.0 )27 {28 }29
![Page 54: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/54.jpg)
2002 Prentice Hall.All rights reserved.
Outline54
RandomAccessRecord.cs
30 // overloaded counstructor sets members to parameter values31 public RandomAccessRecord( int accountValue,32 string firstNameValue, string lastNameValue, 33 double balanceValue )34 {35 Account = accountValue;36 FirstName = firstNameValue;37 LastName = lastNameValue;38 Balance = balanceValue;39 40 } // end constructor41 42 // property Account43 public int Account44 {45 get46 {47 return account;48 }49 50 set51 {52 account = value;53 }54 55 } // end property Account56 57 // property FirstName58 public string FirstName59 {60 get61 {62 return new string( firstName );63 }64
![Page 55: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/55.jpg)
2002 Prentice Hall.All rights reserved.
Outline55
RandomAccessRecord.cs
65 set66 {67 // determine length of string parameter68 int stringSize = value.Length;69 70 // firstName string representation71 string firstNameString = value;72 73 // append spaces to string parameter if too short74 if ( CHAR_ARRAY_LENGTH >= stringSize )75 {76 firstNameString = value +77 new string( ' ', CHAR_ARRAY_LENGTH - stringSize );78 }79 else80 {81 // remove characters from string parameter if too long82 firstNameString = 83 value.Substring( 0, CHAR_ARRAY_LENGTH );84 }85 86 // convert string parameter to char array87 firstName = firstNameString.ToCharArray();88 89 } // end set90 91 } // end property FirstName92 93 // property LastName94 public string LastName95 {96 get97 {98 return new string( lastName );99 }
![Page 56: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/56.jpg)
2002 Prentice Hall.All rights reserved.
Outline56
RandomAccessRecord.cs
100 101 set102 {103 // determine length of string parameter104 int stringSize = value.Length;105 106 // lastName string representation107 string lastNameString = value;108 109 // append spaces to string parameter if too short110 if ( CHAR_ARRAY_LENGTH >= stringSize )111 {112 lastNameString = value +113 new string( ' ', CHAR_ARRAY_LENGTH - stringSize );114 }115 else116 {117 // remove characters from string parameter if too long118 lastNameString = 119 value.Substring( 0, CHAR_ARRAY_LENGTH );120 }121 122 // convert string parameter to char array123 lastName = lastNameString.ToCharArray();124 125 } // end set126 127 } // end property LastName128
![Page 57: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/57.jpg)
2002 Prentice Hall.All rights reserved.
Outline57
RandomAccessRecord.cs
129 // property Balance130 public double Balance131 {132 get133 {134 return balance;135 }136 137 set138 {139 balance = value;140 }141 142 } // end property Balance143 144 } // end class RandomAccessRecord
![Page 58: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/58.jpg)
2002 Prentice Hall.All rights reserved.
Outline58
CreateRandomAccessFile.cs
1 // Fig. 17.15: CreateRandomAccessFile.cs2 // Creating a random file.3 4 // C# namespaces5 using System;6 using System.IO;7 using System.Windows.Forms;8 9 // Deitel namespaces10 using BankLibrary;11 12 class CreateRandomAccessFile13 {14 // number of records to write to disk15 private const int NUMBER_OF_RECORDS = 100;16 17 [STAThread]18 static void Main(string[] args)19 {20 // create random file, then save to disk21 CreateRandomAccessFile file = new CreateRandomAccessFile();22 file.SaveFile();23 24 } // end method Main25 26 // write records to disk27 private void SaveFile()28 {29 // record for writing to disk30 RandomAccessRecord blankRecord = new RandomAccessRecord();31 32 // stream through which serializable data are written to file33 FileStream fileOutput = null;34
![Page 59: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/59.jpg)
2002 Prentice Hall.All rights reserved.
Outline59
CreateRandomAccessFile.cs
35 // stream for writing bytes to file36 BinaryWriter binaryOutput = null;37 38 // create dialog box enabling user to save file39 SaveFileDialog fileChooser = new SaveFileDialog();40 DialogResult result = fileChooser.ShowDialog();41 42 // get file name from user43 string fileName = fileChooser.FileName;44 45 // exit event handler if user clicked Cancel46 if ( result == DialogResult.Cancel )47 return;48 49 // show error if user specified invalid file50 if ( fileName == "" || fileName == null )51 MessageBox.Show("Invalid File Name", "Error", 52 MessageBoxButtons.OK, MessageBoxIcon.Error);53 else54 {55 // write records to file56 try57 {58 // create FileStream to hold records59 fileOutput = new FileStream( fileName,60 FileMode.Create, FileAccess.Write );61 62 // set length of file63 fileOutput.SetLength( RandomAccessRecord.SIZE *64 NUMBER_OF_RECORDS );65 66 // create object for writing bytes to file67 binaryOutput = new BinaryWriter( fileOutput );68
![Page 60: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/60.jpg)
2002 Prentice Hall.All rights reserved.
Outline60
CreateRandomAccessFile.cs
69 // write empty records to file70 for ( int i = 0; i < NUMBER_OF_RECORDS; i++ )71 {72 // set file position pointer in file73 fileOutput.Position = i * RandomAccessRecord.SIZE;74 75 // write blank record to file76 binaryOutput.Write( blankRecord.Account );77 binaryOutput.Write( blankRecord.FirstName );78 binaryOutput.Write( blankRecord.LastName );79 binaryOutput.Write( blankRecord.Balance );80 }81 82 // notify user of success83 MessageBox.Show("File Created", "Success",84 MessageBoxButtons.OK, MessageBoxIcon.Information);85 }86 87 // handle exception if error occurs during writing88 catch( IOException )89 {90 // notify user of error91 MessageBox.Show( "Cannot write to file", "Error", 92 MessageBoxButtons.OK, MessageBoxIcon.Error );93 }94 }95
![Page 61: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/61.jpg)
2002 Prentice Hall.All rights reserved.
Outline61
CreateRandomAccessFile.cs
Program Output
96 // close FileStream97 if ( fileOutput == null )98 fileOutput.Close();99 100 // close BinaryWriter101 if ( binaryOutput == null )102 binaryOutput.Close();103 104 } // end method SaveFile105 } // end class CreateRandomAccessFile
![Page 62: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/62.jpg)
2002 Prentice Hall.All rights reserved.
Outline62
WriteRandomAccessFile.cs
1 // Fig 17.16: WriteRandomAccessFile.cs2 // Write data to a random-access file.3 4 // C# namespaces5 using System;6 using System.Drawing;7 using System.Collections;8 using System.ComponentModel;9 using System.Windows.Forms;10 using System.Data;11 using System.IO;12 13 // Deitel namespaces14 using BankLibrary;15 16 public class WriteRandomAccessFileForm : BankUIForm17 {18 private System.Windows.Forms.Button openButton;19 private System.Windows.Forms.Button enterButton;20 21 private System.ComponentModel.Container components = null;22 23 // number of RandomAccessRecords to write to disk24 private const int NUMBER_OF_RECORDS = 100;25 26 // stream through which data are written to file27 private FileStream fileOutput;28 29 // stream for writing bytes to file30 private BinaryWriter binaryOutput;31
![Page 63: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/63.jpg)
2002 Prentice Hall.All rights reserved.
Outline63
WriteRandomAccessFile.cs
32 [STAThread]33 static void Main() 34 {35 Application.Run( new WriteRandomAccessFileForm() );36 }37 38 // Visual Studio .NET generated code39 40 // invoked when user clicks Open button41 private void openButton_Click(42 object sender, System.EventArgs e )43 {44 // create dialog box enabling user to open file45 OpenFileDialog fileChooser = new OpenFileDialog();46 DialogResult result = fileChooser.ShowDialog();47 48 // get file name from user49 string fileName = fileChooser.FileName;50 51 // exit event handler if user clicked Cancel52 if ( result == DialogResult.Cancel )53 return;54 55 // show error if user specified invalid file56 if ( fileName == "" || fileName == null )57 MessageBox.Show("Invalid File Name", "Error",58 MessageBoxButtons.OK, MessageBoxIcon.Error);59 else60 {61 // open file if file already exists62 try63 {64 // create FileStream to hold records65 fileOutput = new FileStream( fileName, 66 FileMode.Open, FileAccess.Write );
![Page 64: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/64.jpg)
2002 Prentice Hall.All rights reserved.
Outline64
WriteRandomAccessFile.cs
67 68 // create object for writing bytes to file69 binaryOutput = new BinaryWriter( fileOutput );70 71 // disable Open button and enable Enter button72 openButton.Enabled = false; 73 enterButton.Enabled = true;74 }75 76 // notify user if file does not exist77 catch( IOException )78 {79 MessageBox.Show("File Does Not Exits", "Error",80 MessageBoxButtons.OK, MessageBoxIcon.Error);81 }82 }83 84 } // end method openButton_Click85 86 // invoked when user clicks Enter button87 private void enterButton_Click(88 object sender, System.EventArgs e )89 {90 // TextBox values string array91 string[] values = GetTextBoxValues();92 93 // determine whether TextBox account field is empty94 if ( values[ ( int )TextBoxIndices.ACCOUNT ] != "" )95 {96 // write record to file at appropriate position97 try98 {99 // get account number value from TextBox100 int accountNumber = Int32.Parse( 101 values[ ( int )TextBoxIndices.ACCOUNT ] );
![Page 65: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/65.jpg)
2002 Prentice Hall.All rights reserved.
Outline65
WriteRandomAccessFile.cs
102 103 // determine whether accountNumber is valid104 if ( accountNumber > 0 && 105 accountNumber <= NUMBER_OF_RECORDS )106 {107 // move file position pointer108 fileOutput.Seek( ( accountNumber - 1 ) *109 RandomAccessRecord.SIZE, SeekOrigin.Begin );110 111 // write data to file112 binaryOutput.Write( accountNumber );113 binaryOutput.Write(114 values[ ( int )TextBoxIndices.FIRST ] );115 binaryOutput.Write(116 values[ ( int )TextBoxIndices.LAST ] );117 binaryOutput.Write( Double.Parse( values[118 ( int )TextBoxIndices.BALANCE ] ) );119 }120 else121 {122 // notify user if invalid account number123 MessageBox.Show("Invalid Account Number", "Error", 124 MessageBoxButtons.OK, MessageBoxIcon.Error);125 }126 }127 128 // handle number-format exception
![Page 66: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/66.jpg)
2002 Prentice Hall.All rights reserved.
Outline66
WriteRandomAccessFile.cs
Program Output
129 catch( FormatException )130 {131 // notify user if error occurs when formatting numbers132 MessageBox.Show("Invalid Balance", "Error",133 MessageBoxButtons.OK, MessageBoxIcon.Error );134 }135 }136 137 ClearTextBoxes(); // clear text box values138 139 } // end method enterButton_Click140 141 } // end class WriteRandomAccessFileForm
![Page 67: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/67.jpg)
2002 Prentice Hall.All rights reserved.
Outline67
WriteRandomAccessFile.csProgram Output
![Page 68: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/68.jpg)
2002 Prentice Hall.All rights reserved.
Outline68
WriteRandomAccessFile.csProgram Output
![Page 69: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/69.jpg)
2002 Prentice Hall.All rights reserved.
Outline69
WriteRandomAccessFile.csProgram Output
![Page 70: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/70.jpg)
2002 Prentice Hall.All rights reserved.
Outline70
ReadRandomAccessFile.cs
1 // Fig 17.17: ReadRandomAccessFile.cs2 // Reads and displays random-access file contents.3 4 // C# namespaces5 using System;6 using System.Drawing;7 using System.Collections;8 using System.ComponentModel;9 using System.Windows.Forms;10 using System.Data;11 using System.IO;12 13 // Deitel namespaces14 using BankLibrary;15 16 public class ReadRandomAccessFileForm : BankUIForm17 {18 private System.Windows.Forms.Button openButton;19 private System.Windows.Forms.Button nextButton;20 21 private System.ComponentModel.Container components = null;22 23 // stream through which data are read from file24 private FileStream fileInput;25 26 // stream for reading bytes from file27 private BinaryReader binaryInput;28 29 // index of current record to be displayed30 private int currentRecordIndex;31
![Page 71: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/71.jpg)
2002 Prentice Hall.All rights reserved.
Outline71
ReadRandomAccessFile.cs
32 [STAThread]33 static void Main() 34 {35 Application.Run( new ReadRandomAccessFileForm() );36 }37 38 // Visual Studio .NET generated code39 40 // invoked when user clicks Open button41 private void openButton_Click(42 object sender, System.EventArgs e )43 {44 // create dialog box enabling user to open file45 OpenFileDialog fileChooser = new OpenFileDialog();46 DialogResult result = fileChooser.ShowDialog();47 48 // get file name from user49 string fileName = fileChooser.FileName;50 51 // exit eventhandler if user clicked Cancel52 if ( result == DialogResult.Cancel )53 return;54 55 // show error if user specified invalid file56 if ( fileName == "" || fileName == null )57 MessageBox.Show( "Invalid File Name", "Error",58 MessageBoxButtons.OK, MessageBoxIcon.Error );59 else60 {61 // create FileStream to obtain read access to file62 fileInput = new FileStream( fileName, 63 FileMode.Open, FileAccess.Read );64
![Page 72: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/72.jpg)
2002 Prentice Hall.All rights reserved.
Outline72
ReadRandomAccessFile.cs
65 // use FileStream for BinaryWriter to read bytes from file66 binaryInput = new BinaryReader( fileInput );67 68 openButton.Enabled = false; // disable Open button69 nextButton.Enabled = true; // enable Next button70 71 currentRecordIndex = 0;72 ClearTextBoxes();73 }74 75 } // end method openButton_Click76 77 // invoked when user clicks Next button78 private void nextButton_Click(79 object sender, System.EventArgs e )80 {81 // record to store file data82 RandomAccessRecord record = new RandomAccessRecord();83 84 // read record and store data in TextBoxes85 try86 {87 string[] values; // for storing TextBox values88 89 // get next record available in file90 while( record.Account == 0 )91 {92 // set file position pointer to next record in file93 fileInput.Seek( 94 currentRecordIndex * RandomAccessRecord.SIZE, 0 );95 96 currentRecordIndex += 1;97
![Page 73: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/73.jpg)
2002 Prentice Hall.All rights reserved.
Outline73
ReadRandomAccessFile.cs
98 // read data from record99 record.Account = binaryInput.ReadInt32();100 record.FirstName = binaryInput.ReadString();101 record.LastName = binaryInput.ReadString();102 record.Balance = binaryInput.ReadDouble();103 }104 105 // store record values in temporary string array106 values = new string[] {107 record.Account.ToString(),108 record.FirstName,109 record.LastName,110 record.Balance.ToString() };111 112 // copy string array values to TextBox values113 SetTextBoxValues( values );114 }115 116 // handle exception when no records in file117 catch( IOException )118 {119 // close streams if no records in file120 fileInput.Close();121 binaryInput.Close();122 123 openButton.Enabled = true; // enable Open button124 nextButton.Enabled = false; // disable Next button125 ClearTextBoxes();126
![Page 74: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/74.jpg)
2002 Prentice Hall.All rights reserved.
Outline74
ReadRandomAccessFile.cs
Program Output
127 // notify user if no records in file128 MessageBox.Show("No more records in file", "",129 MessageBoxButtons.OK, MessageBoxIcon.Information);130 }131 132 } // end method nextButton_Click133 134 } // end class ReadRandomAccessFileForm
![Page 75: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/75.jpg)
2002 Prentice Hall.All rights reserved.
Outline75
ReadRandomAccessFile.csProgram Output
![Page 76: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/76.jpg)
2002 Prentice Hall.All rights reserved.
Outline76
ReadRandomAccessFile.csProgram Output
![Page 77: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/77.jpg)
2002 Prentice Hall.All rights reserved.
Outline77
ReadRandomAccessFile.csProgram Output
![Page 78: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/78.jpg)
2002 Prentice Hall.All rights reserved.
Outline78
ReadRandomAccessFile.csProgram Output
![Page 79: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/79.jpg)
2002 Prentice Hall.All rights reserved.
Outline79
Transaction.cs
1 // Fig. 17.18: Transaction.cs2 // Handles record transactions.3 4 // C# namespaces5 using System;6 using System.IO;7 using System.Windows.Forms;8 9 // Deitel namespaces10 using BankLibrary;11 12 public class Transaction13 {14 // number of records to write to disk15 private const int NUMBER_OF_RECORDS = 100;16 17 // stream through which data move to and from file18 private FileStream file;19 20 // stream for reading bytes from file21 private BinaryReader binaryInput;22 23 // stream for writing bytes to file24 private BinaryWriter binaryOutput;25 26 // create/open file containing empty records27 public void OpenFile( string fileName )28 {29 // write empty records to file30 try31 {32 // create FileStream from new file or existing file33 file = new FileStream( fileName, FileMode.OpenOrCreate );34
![Page 80: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/80.jpg)
2002 Prentice Hall.All rights reserved.
Outline80
Transaction.cs
35 // use FileStream for BinaryWriter to read bytes from file36 binaryInput = new BinaryReader( file );37 38 // use FileStream for BinaryWriter to write bytes to file39 binaryOutput = new BinaryWriter( file );40 41 // determine whether file has just been created42 if ( file.Length == 0 )43 {44 // record to be written to file45 RandomAccessRecord blankRecord = 46 new RandomAccessRecord();47 48 // new record can hold NUMBER_OF_RECORDS records49 file.SetLength( RandomAccessRecord.SIZE *50 NUMBER_OF_RECORDS );51 52 // write blank records to file53 for ( int i = 0; i < NUMBER_OF_RECORDS; i++ )54 {55 // move file-position pointer to next position56 file.Position = i * RandomAccessRecord.SIZE;57 58 // write blank record to file59 binaryOutput.Write( blankRecord.Account );60 binaryOutput.Write( blankRecord.FirstName );61 binaryOutput.Write( blankRecord.LastName );62 binaryOutput.Write( blankRecord.Balance );63 }64 }65 }66
![Page 81: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/81.jpg)
2002 Prentice Hall.All rights reserved.
Outline81
Transaction.cs
67 // notify user of error during writing of blank records68 catch( IOException )69 { 70 MessageBox.Show("Cannot create file", "Error",71 MessageBoxButtons.OK, MessageBoxIcon.Error);72 }73 74 } // end method OpenFile75 76 // retrieve record depending on whether account is valid77 public RandomAccessRecord GetRecord( string accountValue )78 {79 // store file data associated with account in record80 try81 {82 // record to store file data83 RandomAccessRecord record = new RandomAccessRecord();84 85 // get value from TextBox's account field86 int accountNumber = Int32.Parse( accountValue );87 88 // if account is invalid, do not read data89 if ( accountNumber < 1 || 90 accountNumber > NUMBER_OF_RECORDS )91 {92 // set record's account field with account number93 record.Account = accountNumber;94 }95 96 // get data from file if account is valid97 else98 {99 // locate position in file where record exists100 file.Seek( ( accountNumber - 1 ) *101 RandomAccessRecord.SIZE, 0 );
![Page 82: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/82.jpg)
2002 Prentice Hall.All rights reserved.
Outline82
Transaction.cs
102 103 // read data from record104 record.Account = binaryInput.ReadInt32();105 record.FirstName = binaryInput.ReadString();106 record.LastName = binaryInput.ReadString();107 record.Balance = binaryInput.ReadDouble();108 }109 110 return record;111 }112 113 // notify user of error during reading114 catch( IOException )115 {116 MessageBox.Show( "Cannot read file", "Error",117 MessageBoxButtons.OK, MessageBoxIcon.Error );118 }119 120 return null;121 122 } // end method GetRecord;123 124 // add record to file at position determined by accountNumber125 public bool AddRecord( 126 RandomAccessRecord record, int accountNumber )127 {128 // write record to file129 try130 {131 // move file position pointer to appropriate position132 file.Seek( ( accountNumber - 1 ) * 133 RandomAccessRecord.SIZE, 0 );134
![Page 83: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/83.jpg)
2002 Prentice Hall.All rights reserved.
Outline83
Transaction.cs
135 // write data to file136 binaryOutput.Write(record.Account);137 binaryOutput.Write(record.FirstName);138 binaryOutput.Write(record.LastName);139 binaryOutput.Write(record.Balance);140 }141 142 // notify user if error occurs during writing143 catch( IOException )144 {145 MessageBox.Show( "Error Writing To File", "Error",146 MessageBoxButtons.OK, MessageBoxIcon.Error );147 148 return false; // failure149 }150 151 return true; // success152 153 } // end method AddRecord154 155 } // end class Transaction
![Page 84: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/84.jpg)
2002 Prentice Hall.All rights reserved.
Outline84
TransactionProcessor.cs
1 // Fig. 17.19: TransactionProcessor.cs2 // MDI parent for transaction-processor application.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 11 public class TransactionProcessorForm 12 : System.Windows.Forms.Form13 {14 private System.ComponentModel.Container components = null;15 private System.Windows.Forms.MdiClient MdiClient1;16 17 // reference to StartDialog18 private StartDialogForm startDialog;19 20 // constructor21 public TransactionProcessorForm()22 {23 // required for Windows Form Designer support24 InitializeComponent();25 26 startDialog = new StartDialogForm();27 startDialog.MdiParent = this;28 startDialog.Show();29 }30
![Page 85: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/85.jpg)
2002 Prentice Hall.All rights reserved.
Outline85
TransactionProcessor.cs
31 [STAThread]32 static void Main() 33 {34 Application.Run( new TransactionProcessorForm() );35 }36 37 // Visual Studio .NET generated code38 39 } // end class TransactionProcessorForm
![Page 86: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/86.jpg)
2002 Prentice Hall.All rights reserved.
Outline86
StartDialog.cs
1 // Fig. 17.20: StartDialog.cs2 // Initial dialog box displayed to user. Provides buttons for 3 // creating/opening file and for adding, updating and removing4 // records from file.5 6 // C# namespaces7 using System;8 using System.Drawing;9 using System.Collections;10 using System.ComponentModel;11 using System.Windows.Forms;12 13 // Deitel namespaces14 using BankLibrary;15 16 public delegate void MyDelegate();17 18 public class StartDialogForm : System.Windows.Forms.Form19 {20 private System.Windows.Forms.Button updateButton;21 private System.Windows.Forms.Button newButton;22 private System.Windows.Forms.Button deleteButton;23 private System.Windows.Forms.Button openButton;24 25 private System.ComponentModel.Container components = null;26 27 // reference to dialog box for adding record28 private NewDialogForm newDialog;29 30 // reference to dialog box for updating record31 private UpdateDialogForm updateDialog;32 33 // reference to dialog box for removing record34 private DeleteDialogForm deleteDialog;35
![Page 87: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/87.jpg)
2002 Prentice Hall.All rights reserved.
Outline87
StartDialog.cs
36 // reference to object that handles transactions37 private Transaction transactionProxy;38 39 // Visual Studio .NET generated code40 41 // invoked when user clicks New/Open File button42 private void openButton_Click(43 object sender, System.EventArgs e )44 {45 // create dialog box enabling user to create or open file46 OpenFileDialog fileChooser = new OpenFileDialog();47 DialogResult result;48 string fileName;49 50 // enable user to create file if file does not exist51 fileChooser.Title = "Create File / Open File";52 fileChooser.CheckFileExists = false;53 54 // show dialog box to user55 result = fileChooser.ShowDialog();56 57 // exit event handler if user clicked Cancel58 if ( result == DialogResult.Cancel )59 return;60 61 // get file name from user62 fileName = fileChooser.FileName;63 64 // show error if user specified invalid file65 if ( fileName == "" || fileName == null )66 MessageBox.Show( "Invalid File Name", "Error",67 MessageBoxButtons.OK, MessageBoxIcon.Error );68 69 // open or create file if user specified valid file
![Page 88: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/88.jpg)
2002 Prentice Hall.All rights reserved.
Outline88
StartDialog.cs
70 else71 {72 // create Transaction with specified file73 transactionProxy = new Transaction();74 transactionProxy.OpenFile( fileName );75 76 // enable GUI buttons except for New/Open File button77 newButton.Enabled = true;78 updateButton.Enabled = true;79 deleteButton.Enabled = true;80 openButton.Enabled = false;81 82 // instantiate dialog box for creating records83 newDialog = new NewDialogForm( transactionProxy,84 new MyDelegate( ShowStartDialog ) );85 86 // instantiate dialog box for updating records87 updateDialog = new UpdateDialogForm( transactionProxy,88 new MyDelegate( ShowStartDialog ) );89 90 // instantiate dialog box for removing records91 deleteDialog = new DeleteDialogForm( transactionProxy,92 new MyDelegate( ShowStartDialog ) );93 94 // set StartDialog as MdiParent for dialog boxes95 newDialog.MdiParent = this.MdiParent;96 updateDialog.MdiParent = this.MdiParent;97 deleteDialog.MdiParent = this.MdiParent;98 }99 100 } // end method openButton_Click101
![Page 89: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/89.jpg)
2002 Prentice Hall.All rights reserved.
Outline89
StartDialog.cs
102 // invoked when user clicks New Record button103 private void newButton_Click(104 object sender, System.EventArgs e )105 {106 Hide(); // hide StartDialog107 newDialog.Show(); // show NewDialog108 109 } // end method newButton_Click110 111 private void updateButton_Click(112 object sender, System.EventArgs e )113 {114 Hide(); // hide StartDialog115 updateDialog.Show(); // show UpdateDialog116 117 } // end method updateButton_Click118 119 private void deleteButton_Click(120 object sender, System.EventArgs e )121 {122 Hide(); // hide StartDialog123 deleteDialog.Show(); // show DeleteDialog124 125 } // end method deleteButton_Click126 127 protected void ShowStartDialog()128 {129 Show();130 }131 132 } // end class StartDialogForm
![Page 90: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/90.jpg)
2002 Prentice Hall.All rights reserved.
Outline90
StartDialog.csProgram Output
![Page 91: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/91.jpg)
2002 Prentice Hall.All rights reserved.
Outline91
UpdateDialog.cs
1 // Fig. 17.22: UpdateDialog.cs2 // Enables user to update records in file.3 4 // C# namespaces5 using System;6 using System.Drawing;7 using System.Collections;8 using System.ComponentModel;9 using System.Windows.Forms;10 11 // Deitel namespaces12 using BankLibrary;13 14 public class UpdateDialogForm : BankUIForm15 {16 private System.Windows.Forms.Label transactionLabel;17 private System.Windows.Forms.TextBox transactionTextBox;18 19 private System.Windows.Forms.Button saveButton;20 private System.Windows.Forms.Button cancelButton;21 22 private System.ComponentModel.Container components = null;23 24 // reference to object that handles transactions25 private Transaction transactionProxy;26 27 // delegate for method that displays previous window28 private MyDelegate showPreviousWindow;29
![Page 92: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/92.jpg)
2002 Prentice Hall.All rights reserved.
Outline92
UpdateDialog.cs
30 // initialize components and set members to parameter values31 public UpdateDialogForm(32 Transaction transactionProxyValue, 33 MyDelegate delegateValue )34 {35 InitializeComponent();36 showPreviousWindow = delegateValue;37 38 // instantiate object that handles transactions39 transactionProxy = transactionProxyValue;40 }41 42 // Visual Studio .NET generated code43 44 // invoked when user enters text in account TextBox45 private void accountTextBox_KeyDown(46 object sender, System.Windows.Forms.KeyEventArgs e )47 {48 // determine whether user pressed Enter key49 if ( e.KeyCode == Keys.Enter )50 {51 // retrieve record associated with account from file52 RandomAccessRecord record =53 transactionProxy.GetRecord( GetTextBoxValues()54 [ ( int )TextBoxIndices.ACCOUNT ] );55 56 // return if record does not exist57 if ( record == null )58 return;59
![Page 93: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/93.jpg)
2002 Prentice Hall.All rights reserved.
Outline93
UpdateDialog.cs
60 // determine whether record is empty61 if ( record.Account != 0 )62 {63 // store record values in string array64 string[] values = {65 record.Account.ToString(),66 record.FirstName.ToString(),67 record.LastName.ToString(),68 record.Balance.ToString() };69 70 // copy string array value to TextBox values71 SetTextBoxValues( values );72 transactionTextBox.Text = "[Charge or Payment]";73 74 }75 else76 {77 // notify user if record does not exist78 MessageBox.Show(79 "Record Does Not Exist", "Error",80 MessageBoxButtons.OK, MessageBoxIcon.Error );81 }82 }83 84 } // end method accountTextBox_KeyDown85 86 // invoked when user enters text in transaction TextBox87 private void transactionTextBox_KeyDown(88 object sender, System.Windows.Forms.KeyEventArgs e )89 {90 // determine whether user pressed Enter key91 if ( e.KeyCode == Keys.Enter )92 {
![Page 94: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/94.jpg)
2002 Prentice Hall.All rights reserved.
Outline94
UpdateDialog.cs
93 // calculate balance using transaction TextBox value94 try95 {96 // retrieve record associated with account from file97 RandomAccessRecord record = 98 transactionProxy.GetRecord( GetTextBoxValues()99 [ ( int )TextBoxIndices.ACCOUNT ] );100 101 // get transaction TextBox value102 double transactionValue = 103 Double.Parse( transactionTextBox.Text );104 105 // calculate new balance (old balance + transaction)106 double newBalance = 107 record.Balance + transactionValue;108 109 // store record values in string array110 string[] values = {111 record.Account.ToString(),112 record.FirstName.ToString(),113 record.LastName.ToString(),114 newBalance.ToString() };115 116 // copy string array value to TextBox values117 SetTextBoxValues( values );118 119 // clear transaction TextBox120 transactionTextBox.Text = "";121 }122
![Page 95: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/95.jpg)
2002 Prentice Hall.All rights reserved.
Outline95
UpdateDialog.cs
123 // notify user if error occurs in parameter mismatch124 catch( FormatException )125 {126 MessageBox.Show( 127 "Invalid Transaction", "Error", 128 MessageBoxButtons.OK, MessageBoxIcon.Error );129 }130 }131 132 } // end method transactionTextBox_KeyDown133 134 // invoked when user clicks Save button135 private void saveButton_Click(136 object sender, System.EventArgs e )137 {138 RandomAccessRecord record = 139 transactionProxy.GetRecord( GetTextBoxValues()140 [ ( int )TextBoxIndices.ACCOUNT ] );141 142 // if record exists, update in file143 if ( record != null )144 UpdateRecord( record );145 146 Hide();147 ClearTextBoxes();148 showPreviousWindow();149 150 } // end method saveButton_Click151
![Page 96: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/96.jpg)
2002 Prentice Hall.All rights reserved.
Outline96
UpdateDialog.cs
152 // invoked when user clicks Cancel button153 private void cancelButton_Click(154 object sender, System.EventArgs e )155 {156 Hide();157 ClearTextBoxes();158 showPreviousWindow();159 160 } // end method cancelButton_Click161 162 // update record in file at position specified by accountNumber163 public void UpdateRecord( RandomAccessRecord record )164 {165 // store TextBox values in record and write record to file166 try167 {168 int accountNumber = record.Account;169 string[] values = GetTextBoxValues();170 171 // store values in record172 record.Account = accountNumber;173 record.FirstName = 174 values[ ( int )TextBoxIndices.FIRST ];175 record.LastName = 176 values[ ( int )TextBoxIndices.LAST ];177 record.Balance = 178 Double.Parse( 179 values[ ( int )TextBoxIndices.BALANCE ] );180 181 // add record to file182 if ( transactionProxy.AddRecord(183 record, accountNumber ) == false )184 185 return; // if error186 }
![Page 97: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/97.jpg)
2002 Prentice Hall.All rights reserved.
Outline97
UpdateDialog.cs
Program Output
187 188 // notify user if error occurs in parameter mismatch189 catch( FormatException )190 {191 MessageBox.Show( "Invalid Balance", "Error",192 MessageBoxButtons.OK, MessageBoxIcon.Error );193 194 return;195 }196 197 MessageBox.Show( "Record Updated", "Success",198 MessageBoxButtons.OK, 199 MessageBoxIcon.Information );200 201 } // end method UpdateRecord202 203 } // end class UpdateDialogForm
![Page 98: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/98.jpg)
2002 Prentice Hall.All rights reserved.
Outline98
UpdateDialog.csProgram Output
![Page 99: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/99.jpg)
2002 Prentice Hall.All rights reserved.
Outline99
NewDialog.cs
1 // Fig. 17.21: NewDialog.cs2 // Enables user to insert new record into file.3 4 // C# namespaces5 using System;6 using System.Drawing;7 using System.Collections;8 using System.ComponentModel;9 using System.Windows.Forms;10 11 // Deitel namespaces12 using BankLibrary;13 14 public class NewDialogForm : BankUIForm15 {16 private System.Windows.Forms.Button saveButton;17 private System.Windows.Forms.Button cancelButton;18 19 private System.ComponentModel.Container components = null;20 21 // reference to object that handles transactions22 private Transaction transactionProxy;23 24 // delegate for method that displays previous window25 public MyDelegate showPreviousWindow;26 27 // constructor28 public NewDialogForm( Transaction transactionProxyValue,29 MyDelegate delegateValue )30 {31 InitializeComponent();32 showPreviousWindow = delegateValue;33
![Page 100: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/100.jpg)
2002 Prentice Hall.All rights reserved.
Outline100
NewDialog.cs
34 // instantiate object that handles transactions35 transactionProxy = transactionProxyValue;36 }37 38 // Visual Studio .NET generated code39 40 // invoked when user clicks Cancel button41 private void cancelButton_Click(42 object sender, System.EventArgs e )43 {44 Hide();45 ClearTextBoxes();46 showPreviousWindow();47 48 } // end method cancelButton_Click49 50 // invoked when user clicks Save As button51 private void saveButton_Click(52 object sender, System.EventArgs e )53 {54 RandomAccessRecord record =55 transactionProxy.GetRecord( GetTextBoxValues()56 [ ( int )TextBoxIndices.ACCOUNT ] );57 58 // if record exists, add it to file59 if ( record != null )60 InsertRecord( record );61 62 Hide();63 ClearTextBoxes();64 showPreviousWindow();65 66 } // end method saveButton_Click67
![Page 101: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/101.jpg)
2002 Prentice Hall.All rights reserved.
Outline101
NewDialog.cs
68 // insert record in file at position specified by accountNumber69 private void InsertRecord( RandomAccessRecord record )70 {71 //store TextBox values in string array72 string[] textBoxValues = GetTextBoxValues();73 74 // store TextBox account field75 int accountNumber = Int32.Parse(76 textBoxValues[ ( int )TextBoxIndices.ACCOUNT ] );77 78 // notify user and return if record account is not empty79 if ( record.Account != 0 )80 {81 MessageBox.Show(82 "Record Already Exists or Invalid Number", "Error",83 MessageBoxButtons.OK, MessageBoxIcon.Error);84 85 return;86 }87 88 // store values in record89 record.Account = accountNumber;90 record.FirstName = 91 textBoxValues[ ( int )TextBoxIndices.FIRST];92 record.LastName = 93 textBoxValues[ ( int )TextBoxIndices.LAST];94 record.Balance = Double.Parse( 95 textBoxValues[ ( int )TextBoxIndices.BALANCE ] );96 97 // add record to file98 try99 {100 if ( transactionProxy.AddRecord(101 record, accountNumber ) == false )
![Page 102: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/102.jpg)
2002 Prentice Hall.All rights reserved.
Outline102
NewDialog.cs
Program Output
102 103 return; // if error104 }105 106 // notify user if error occurs in parameter mismatch107 catch( FormatException )108 {109 MessageBox.Show( "Invalid Balance", "Error",110 MessageBoxButtons.OK, MessageBoxIcon.Error );111 }112 113 MessageBox.Show( "Record Created", "Success",114 MessageBoxButtons.OK, MessageBoxIcon.Information );115 116 } // end method InsertRecord117 118 } // end class NewDialogForm
![Page 103: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/103.jpg)
2002 Prentice Hall.All rights reserved.
Outline103
NewDialog.csProgram Output
![Page 104: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/104.jpg)
2002 Prentice Hall.All rights reserved.
Outline104
DeleteDialog.cs
1 // Fig. 17.23: DeleteDialog.cs2 // Enables user to delete records in file.3 4 // C# namespaces5 using System;6 using System.Drawing;7 using System.Collections;8 using System.ComponentModel;9 using System.Windows.Forms;10 11 // Deitel namespaces12 using BankLibrary;13 14 public class DeleteDialogForm : System.Windows.Forms.Form15 {16 private System.Windows.Forms.Label accountLabel;17 private System.Windows.Forms.TextBox accountTextBox;18 19 private System.Windows.Forms.Button deleteButton;20 private System.Windows.Forms.Button cancelButton;21 22 private System.ComponentModel.Container components = null;23 24 // reference to object that handles transactions25 private Transaction transactionProxy;26 27 // delegate for method that displays previous window28 private MyDelegate showPreviousWindow;29 30 // initialize components and set members to parameter values31 public DeleteDialogForm( Transaction transactionProxyValue, 32 MyDelegate delegateValue)33 {34 InitializeComponent();35 showPreviousWindow = delegateValue;
![Page 105: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/105.jpg)
2002 Prentice Hall.All rights reserved.
Outline105
DeleteDialog.cs
36 37 // instantiate object that handles transactions38 transactionProxy = transactionProxyValue;39 }40 41 // Visual Studio .NET generated code42 43 // invoked when user clicks Delete Record button44 private void deleteButton_Click(45 object sender, System.EventArgs e)46 {47 RandomAccessRecord record =48 transactionProxy.GetRecord( accountTextBox.Text );49 50 // if record exists, delete it in file51 if ( record != null )52 DeleteRecord( record );53 54 this.Hide();55 showPreviousWindow();56 57 } // end method deleteButton_Click58 59 // invoked when user clicks Cancel button60 private void cancelButton_Click(61 object sender, System.EventArgs e)62 {63 this.Hide();64 showPreviousWindow();65 66 } // end method cancelButton_Click67
![Page 106: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/106.jpg)
2002 Prentice Hall.All rights reserved.
Outline106
DeleteDialog.cs
68 // delete record in file at position specified by accountNumber69 public void DeleteRecord( RandomAccessRecord record )70 {71 int accountNumber = record.Account;72 73 // display error message if record does not exist74 if ( record.Account == 0 )75 {76 MessageBox.Show( "Record Does Not Exist", "Error",77 MessageBoxButtons.OK, MessageBoxIcon.Error );78 accountTextBox.Clear();79 80 return;81 }82 83 // create blank record84 record = new RandomAccessRecord();85 86 // write over file record with empty record87 if ( transactionProxy.AddRecord(88 record, accountNumber ) == true )89 90 // notify user of successful deletion91 MessageBox.Show( "Record Deleted", "Success",92 MessageBoxButtons.OK, MessageBoxIcon.Information );
![Page 107: 2002 Prentice Hall. All rights reserved. 1 Chapter 17 – Files and Streams Outline 17.1 Introduction 17.2 Data Hierarchy 17.3 Files and Streams 17.4 Classes.](https://reader038.fdocuments.us/reader038/viewer/2022110206/56649d015503460f949d33e3/html5/thumbnails/107.jpg)
2002 Prentice Hall.All rights reserved.
Outline107
DeleteDialog.cs
Program Output
93 else94 95 // notify user of failure96 MessageBox.Show( 97 "Record could not be deleted", "Error",98 MessageBoxButtons.OK, MessageBoxIcon.Error );99 100 accountTextBox.Clear();101 102 } // end method DeleteRecord103 104 } // end class DeleteDialogForm