C# Programming: From Problem Analysis to Program Design

Slides:



Advertisements
Similar presentations
Reading and Writing Text Files Svetlin Nakov Telerik Corporation
Advertisements

Java File I/O. File I/O is important! Being able to write and read from files is necessary and is also one common practice of a programmer. Examples include.
Text File I/O. Text Files and Binary Files Files that are designed to be read by human beings, and that can be read or written with an editor are called.
C# - Files and Streams Outline Files and Streams Classes File and Directory Creating a Sequential-Access File Reading Data from a Sequential-Access.
JAVA: An Introduction to Problem Solving & Programming, 7 th Ed. By Walter Savitch ISBN © 2015 Pearson Education, Inc., Upper Saddle River,
Files & Streams. Files Introduction Files are used for long-term retention of large amounts of data, even after the program that created the data terminates.
IS 1181 IS 118 Introduction to Development Tools VB Chapter 06.
ASP.NET Programming with C# and SQL Server First Edition
C# Programming: From Problem Analysis to Program Design1 Working with Files C# Programming: From Problem Analysis to Program Design 3 rd Edition 13.
MIS316 – BUSINESS APPLICATION DEVELOPMENT – Chapter 14 – Files and Streams 1Microsoft Visual C# 2012, Fifth Edition.
Understanding Input/Output (I/O) Classes Lesson 5.
Lecture Set 12 Sequential Files and Structures Part B – Reading and Writing Sequential Files.
1 Binary Files ผศ. ดร. หมัดอามีน หมันหลิน Faculty of IST, MUT
Visual C Sharp – File I/O - 1 Variables and arrays only temporary - lost when a program terminates Files used for long term storage (Data bases considered.
Chapter 12 Working with Files CIS 3260 Introduction to Programming using C# Hiro Takeda.
Neal Stublen Open/Close Connections  ADO.NET uses “connection pooling” to optimize opening and closing connections to the database.
Files and Streams. Java I/O File I/O I/O streams provide data input/output solutions to the programs. A stream can represent many different kinds of sources.
Lector: Aliyev H.U. Lecture №5 Telecommunication network software design with.NET. Using streams for network programming TASHKENT UNIVERSITY OF INFORMATION.
 2006 Pearson Education, Inc. All rights reserved Files and Streams.
1 14/10/58Dr.Mud-Armeen Munlin 1 Files and Streams ผศ. ดร. หมัดอามีน หมันหลิน Faculty of IST, MUT
File I/O Static void Main( ) {... } data. Topics I/O Streams Reading and Writing Text Files Formatting Text Files Handling Stream Errors File Pointers.
Files and Streams File Types, Using Streams, Manipulating Files SoftUni Team Technical Trainers Software University
Reference: Lecturer Lecturer Reham O. Al-Abdul Jabba lectures for cap211 Files and Streams- I.
Object Oriented Software Development 10. Persistent Storage.
Files and Streams. Objectives Learn about the classes that support file input/output Understand the concept of abstraction and how it related to the file.
CS360 Windows Programming
Chapter 14: Files and Streams. 2Microsoft Visual C# 2012, Fifth Edition Files and the File and Directory Classes Temporary storage – Usually called computer.
CMSC 202 Text File I/O. Aug 8, Text Files and Binary Files Files that are designed to be read by human beings, and that can be read or written with.
BIM313 – Advanced Programming File Operations 1. Contents Structure of a File Reading/Writing Texts from/to Files File and Directory Operations 2.
Input and Output 23: Input and Output
CSC 298 Streams and files.
Chapter 11: Advanced Inheritance Concepts. Objectives Create and use abstract classes Use dynamic method binding Create arrays of subclass objects Use.
Ajay Tripathi Input Output. Ajay Tripathi Input/output (IO) refers to the operations for reading and writing data to streams and files. In the.NET Framework,
McGraw-Hill © 2010 The McGraw-Hill Companies, Inc. All rights reserved. Chapter 11 Data Files.
Files and Streams. What is a file? Up until now, any stored data within a program is lost when the program closes. A file is a permanent way to store.
Files and Streams. Objectives Learn about the classes that support file input/output Understand the concept of abstraction and how it related to the file.
Files and Streams Lec Introduction  Files are used for long-term retention of large amounts of data, even after the program that created the.
FILES AND EXCEPTIONS Topics Introduction to File Input and Output Using Loops to Process Files Processing Records Exceptions.
C# Programming: From Problem Analysis to Program Design1 Creating Your Own Classes C# Programming: From Problem Analysis to Program Design 4th Edition.
Chapter 6: Creating Windows–based Applications 1 Microsoft® Visual C# 2008.
ASP.NET Programming with C# and SQL Server First Edition
INF230 Basics in C# Programming
Module 6: Building .NET–based Applications with C#
Creating Your Own Classes
CMSC 202 Text File I/O.
Input and Output 23: Input and Output
C# Programming: From Problem Analysis to Program Design
Files.
18 Files and Streams.
Defiana Arnaldy, M.Si File and Stream I/O Defiana Arnaldy, M.Si
I/O Basics.
File Types, Using Streams, Manipulating Files
Lectures 12 Files & Streams Dr. Eng. Ibrahim El-Nahry.
How to work with files and data streams
CSCI 3327 Visual Basic Chapter 11: Files and Streams
Files and Streams.
Files and Streams Lect3 CT1411.
Sequential Input and Output using Text Files
File Input/Output (I/O)
C# Programming: From Problem Analysis to Program Design
Topics Introduction to File Input and Output
Chapter 7 Files and Exceptions
Files & Streams.
Files and Streams Lect10 GC201 12/1/2015.
CIS16 Application Development and Programming using Visual Basic.net
Topics Introduction to File Input and Output
How to work with files and data streams
Chapter 15 Files, Streams and Object Serialization
Files and Streams.
Topics Introduction to File Input and Output
Presentation transcript:

C# Programming: From Problem Analysis to Program Design Working with Files 13 C# Programming: From Problem Analysis to Program Design 4th Edition C# Programming: From Problem Analysis to Program Design

Chapter Objectives Learn about the System.IO namespace Explore the File and Directory classes Contrast the FileInfo and DirectoryInfo classes to the File and Directory classes Discover how stream classes are used Read & write data from/to text files Explore appending data to text files Use exception-handling techniques to process text files Read from and write binary files

System.IO Namespace Provides basic file and directory support classes Contains types that enable you to read and write files and data streams Many of the types or classes defined as part of the System.IO namespace are designed around streams C# Programming: From Problem Analysis to Program Design

System.IO Namespace (continued) Table 13-1 System.IO classes

System.IO Namespace (continued) Many are exception classes that can be thrown while accessing information using streams, files, and directories Table 13-1 System.IO classes (continued)

System.IO Namespace (continued) Figure 13-1 .NET file class hierarchy

File and Directory Classes Utility classes allow you to manipulate files and directory structures Aid in copying, moving, renaming, creating, opening, deleting, and appending files Expose only static members Objects are not instantiated from these classes To invoke the method, the method name is preceded by the class name (as opposed to an object’s name) File.Copy("sourceFile", "targetFile"); C# Programming: From Problem Analysis to Program Design

File Class Table 13-2 File class static members

Examples: File class File.Delete(@"c:/temp/dummyTextFile1.txt"); File.Delete(@"c:/temp/dummyTextFile2.txt"); File.AppendAllLines(@"c:/temp/dummyTextFile1.txt", new string[] { " Line1\n Line2\n Line3\n" }); File.AppendAllText(@"c:/temp/dummyTextFile1.txt", " Line4\n Line5\n Line6"); File.Copy(@"c:/temp/dummyTextFile1.txt", @"c:/temp/dummyTextFile2.txt"); File.Exists(@"c:/temp/dummyTextFile1.txt") C# Programming: From Problem Analysis to Program Design

File Class (continued) Visual Studio IntelliSense feature provides information Figure 13-2 IntelliSense display

File Class (continued) Enumeration - special form of value type that supplies alternate names for the values of an underlying primitive type Enumeration type has a name and a set of fields public enum DayOfWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } ... DayOfWeek d = DayOfWeek.Friday; if (d == DayOfWeek.Sunday) . . .

File Class (continued) GetAttritubes( ) returns a enumeration Enumerated values for FileAttributes include: Archive, Compressed, Device, Directory, Encrypted, Hidden, Normal, ReadOnly, and System Using enumerations makes coding simpler and the output more readable C# Programming: From Problem Analysis to Program Design

File Class (continued) String fileName = @"c:/temp/dummyTextFile1.txt"; Console.WriteLine( "FileName: {0}", fileName ); Console.WriteLine( "Attributes: {0}", File.GetAttributes(fileName) ); Console.WriteLine( "Created: {0}", File.GetCreationTime( fileName ) ); Console.WriteLine( "Last Accessed: {0}", File.GetLastAccessTime( fileName ) ); GetAttributes( ) returns enumeration Figure 13-3 Output from the DirectoryStructure application

Directory Class Static methods for creating and moving through directories and subdirectories Table 13-3 Directory class members

Directory Class (continued) Table 13-3 Directory class members (continued)

DirectoryInfo and FileInfo Classes Add additional functionality beyond File and Directory classes Difference – DirectoryInfo and FileInfo have instance methods instead of static members Both have public properties and public constructors Neither can be inherited FileInfo fileInfo = new FileInfo(@"c:/temp/dummyTextFile1.txt"); Console.WriteLine( "FileInfo.Length {0}", fileInfo.Length); Console.WriteLine( "FileInfo.FullName {0}", fileInfo.FullName);

Table 13-4 FileInfo properties

DirectoryInfo Adds two other key properties, Parent and Root Parent gets the parent directory of a specified subdirectory Root gets the root portion of a path Be careful with paths; they must be well-formed or an exception is raised DirectoryInfo dir = new DirectoryInfo("."); Console.WriteLine("Current Directory: \n{0}\n", Directory.GetCurrentDirectory( ));

DirectoryInfo Example DirectoryInfo dir = new DirectoryInfo(@"c:/temp"); foreach (FileInfo file in dir.GetFiles("*.zip")) { Console.WriteLine( file.FullName.PadRight(20,' ') + " " + file.LastWriteTime.ToString().PadRight(25,' ') + file.Length.ToString().PadRight(10,' ')); } C# Programming: From Problem Analysis to Program Design

File Streams Several abstract classes for dealing with files Stream, TextWriter, and TextReader Stream classes provide generic methods for dealing with input/output IO.Stream class and its subclasses – byte-level data IO.TextWriter and IO.TextReader – data in a text (readable) format StreamReader and StreamWriter derived classes of IO.TextWriter and IO.TextReader

File Streams (continued) StreamWriter class for writing data to text file. Includes implementations for Write( ) and WriteLine( ) StreamReader class to read or write to or from text files Includes implementations of Read( ) and ReadLine( ) System.IO namespace must be imported for files using System.IO;

File Streams (continued) The bin\Debug or bin\Release subdirectory of the current project is used for files when you don’t specify a path Use verbatim string character (@) or escape sequence (\\) to specify path @"C:\CSharpProjects\Proj1" "c:\\CSharpProjects\\Proj1" If the file is stored in the same Visual Studio folder that holds the project and source code files, you would write @ "../../filename" Indicates go up two directories from bin\Debug

File Streams (continued) StreamWriter outputFile = new StreamWriter(@"c:\temp\someOutputFileName.txt"); StreamReader inputFile = new StreamReader(@"c:\temp\someInputFileName.txt"); outputFile and inputFile represent the file stream objects Actual file names are "c:\temp\someOutputFileName.txt" and "c:\temp\someInputFileName.txt” – inside double quotes Place familiar file extensions such as .dat, .dta, or .txt onto the end of actual filename when it is created C# Programming: From Problem Analysis to Program Design

File Streams (continued) Use Write( ) or WriteLine( ) with the instantiated stream object outputFile.WriteLine("This is the first line in a text file"); Use Read( ) or ReadLine( ) with the instantiated stream object string inValue = inputFile.ReadLine( ); C# Programming: From Problem Analysis to Program Design

File Streams (continued) Table 13-5 StreamWriter members

File Streams (continued) Table 13-6 StreamReader members

Writing Text Files Enclose attempts to access text files inside try…catch blocks Constructor for StreamWriter class is overloaded To Append data onto the end of the file, use the constructor with Boolean variable fileOut = new StreamWriter("../../info.txt", true); true indicates to append Values are placed in the file in a sequential fashion Close( ) method used to finish storing the values C# Programming: From Problem Analysis to Program Design

Writing Text Files // write ten lines to a disk file, each holding dummy firstName, last, phone private static void Experiment01() { try StreamWriter outputfile = new StreamWriter(@"c:/temp/westerosladies.txt"); for (int i = 0; i < 10; i++) outputfile.WriteLine("ladyFirstName{0} ladyLastName{0} ladyPhone{0}", i); } outputfile.Close(); Console.WriteLine("Done Phase1"); catch (Exception e) Console.WriteLine("PROBLEM: " + e.Message );

Reading Text Files Constructor for StreamReader is overloaded StreamReader class enables lines of text to be read from a file Constructor for StreamReader is overloaded Can specify different encoding schema or an initial buffer size Can use members of parent or ancestor classes or static members of the File class To avoid programming catch for FileNotFoundException class or DirectoryNotFoundException class, call File.Exists(filename)

Reading Text Files (continued) // read and display on console data from a text file on disk try { StreamReader infile = new treamReader(@"c:/temp/westerosladies.txt"); String line; while ( (line = infile.ReadLine() ) != null) Console.WriteLine("ECHO>>> " + line); } infile.Close(); catch (Exception e) Console.WriteLine("PROBLEM: " + e.Message );

Adding a Using Statement Useful when working with files or databases When writing data to a file, the data is not stored in the file properly until the file is closed If you do not close the file – you will find an empty file With using block, not necessary for you to call the Close( ) method – automatically called by the CLR C# Programming: From Problem Analysis to Program Design

Adding a Using Statement try { using (StreamReader inFile = new StreamReader("name.txt")) while ((inValue = inFile.ReadLine()) != null) this.lstBoxNames.Items.Add(inValue); } catch . . . StreamReader object defined and instantiated inside using block inFile object exists only in this using block Guaranteed the file is closed when you exit the using block

BinaryReader and BinaryWriter Classes BinaryWriter and BinaryReader classes used for writing and reading binary data, rather than character strings Files created are readable by the computer You cannot open and read binary files using Notepad Program is needed to interpret the file contents C# Programming: From Problem Analysis to Program Design

BinaryReader and BinaryWriter Classes (continued) Table 13-7 BinaryWriter members C# Programming: From Problem Analysis to Program Design

BinaryReader Class Table 13-7 BinaryReader members Notice several Read( ) methods… each focused on the type of data it would be retrieving Table 13-7 BinaryReader members

BinaryWriter Class Objects are instantiated of the FileStream and BinaryWriter classes FileStream filStream; BinaryWriter binWriter; BinaryWriter object is wrapped around the FileStream object filStream = new FileStream(fileName, fileMode.CreateNew); Second argument to the FileStream constructor is an enumeration {Append, Create, CreateNew, Open, OpenOrCreate, Truncate } C# Programming: From Problem Analysis to Program Design

BinaryWriter Class (continued) First a string argument is written to the file Then several integers are written to the file Next a decimal value is written to the file Finally both objects must be closed (Both must be closed in order for the file to be created properly) FileStream filStream = new FileStream(@"c:\test.txt", FileMode.CreateNew); BinaryWriter binWriter = new BinaryWriter(filStream); double aValue = 3.14; binWriter.Write("Hello world"); for (int i = 0; i < 11; i++) { binWriter.Write(i); } binWriter.Write(aValue); binWriter.Close( ); filStream.Close( );

BinaryReader Class Cannot simply open a binary file in Notepad and view its contents Need to write program statements that use the BinaryReader class to retrieve the results. FileStream filStream = new FileStream( fileName, FileMode.Open, FileAccess.Read) BinaryReader binReader = new BinaryReader(filStream); C# Programming: From Problem Analysis to Program Design

BinaryReader Class (continued) Constructor for the FileStream object includes values for two enumerated types FileMode.Open and FileAccess.Read FileAccess enumerations are Read,Write, and ReadWrite There are different read methods, such as: ReadInt32( ), ReadDouble( ) and ReadString( ) C# Programming: From Problem Analysis to Program Design

BinaryReader Class (continued) //using BinaryReader (continuation) FileStream filStreamIn = new FileStream(@"c:\temp\test.bin", FileMode.Open); BinaryReader binReader = new BinaryReader(filStreamIn); strValue = binReader.ReadString(); Console.WriteLine("STRING >> {0}", strValue); for (int i = 0; i < 11; i++) { intValue = binReader.ReadInt32(); Console.WriteLine("INT >> {0}", intValue); } douValue = binReader.ReadDouble(); Console.WriteLine("DOUBLE >> {0}", douValue);

Random Access Files Can use random access with text or binary files FileStream class also supports randomly accessing data Values can be processed in any order For instance, fifth data record can be retrieved and processed before the first record. Accomplished using concept called seeking – Seek( ) is a member of the FileStream class Seek( ) lets you move using an offset reference parameter Offset can be relative to beginning, current position or end of file Can use random access with text or binary files C# Programming: From Problem Analysis to Program Design

Random Access Files Background Converting string type to array of bytes (byte[]) String rec1 = "111 FirstName1 LastName1 Phone1"; byte[] buffer = Encoding.ASCII.GetBytes(rec1); Console.WriteLine("buffer " + buffer); Converting array of bytes to string rec1 = Encoding.ASCII.GetString(buffer); Console.WriteLine("string " + rec1);

Random Access Files //read & write FIXED-LENGTH records to a random file String rec1 = "111 FirstName1 LastName1 Phone1"; String rec2 = "222 FirstName2 LastName2 Phone2"; String rec3 = "333 FirstName3 LastName3 Phone3";   int recLen = rec1.Length; byte[] buffer = new byte[recLen]; //write records to disk file using (FileStream fs = new FileStream(@"c:\temp\people.dat", FileMode.Create)) using (BinaryWriter bw = new BinaryWriter(fs)) { buffer = Encoding.ASCII.GetBytes(rec1); bw.Write(buffer); buffer = Encoding.ASCII.GetBytes(rec2); buffer = Encoding.ASCII.GetBytes(rec3); }

Random Access Files (cont)   //read fixed-length records from random file (in reverse order!) using (FileStream fs = new FileStream(@"c:\temp\people.dat", FileMode.Open)) using (BinaryReader br = new BinaryReader(fs)) { for (int position = 2; position >= 0; position--) int offset = position * recLen; fs.Seek(offset, SeekOrigin.Begin); br.Read(buffer, 0, recLen); Console.WriteLine("Position {0} Record: {1}", position, Encoding.ASCII.GetString(buffer)); } C# Programming: From Problem Analysis to Program Design

Other Stream Classes NetworkStream class provides methods for sending and receiving data over stream sockets Methods similar to the other stream classes, including Read and Write methods For a complete example, download sample from: https://gist.github.com/jamesmanning/2622054 MemoryStream class used to create streams that have memory as a backing store instead of a disk or a network connection Reduce the need for temporary buffers and files in an application

Other Stream Classes WebClient class provides methods for sending and receiving data over the Internet // create a new instance of WebClient to get NPR RSS Headlines page WebClient client = new WebClient(); string urlHeadlinesNPR = "http://www.npr.org/sections/news/"; try { // in this example the response is an HTML page string response = client.DownloadString(urlHeadlinesNPR); Console.WriteLine("Response:\n{0}", response); } catch (Exception e) Console.WriteLine(e.Message);

Other Stream Classes Using the WebClient class to reach NPR Headlines http://www.npr.org/sections/news/

Coding Standards Good style improves the maintainability of the software Include exception-handling techniques to deal with file or directory not found types of problems System.IO namespace should be added for files Always close files that are opened in applications C# Programming: From Problem Analysis to Program Design

Resources C# Code Style Guide – http://www.sourceformat.com/pdf/cs-coding-standard-bellware.pdf C# Station - How to: Reading and Writing Text Files – http://www.csharp-station.com/HowTo/ReadWriteTextFile.aspx Dot Net Perls - C# File Handling – http://dotnetperls.com/file-handling C# Programming: From Problem Analysis to Program Design

Chapter Summary System.IO namespace File and Directory classes Static members Copy, move, append to, and rename files Create, delete, and rename directories FileInfo and DirectoryInfo classes Added functionality to File and Directory classes Instantiate objects of these classes C# Programming: From Problem Analysis to Program Design

Chapter Summary (continued) StreamWriter class StreamReader class BinaryReader and BinaryWriter classes Create and access binary (non-readable) files FileDialog classes OpenFileDialog CloseFileDialog ShowDialog used to display dialog box C# Programming: From Problem Analysis to Program Design

Client/Server NetworkStream (Socket) class Program { // Simple TCP client and server - By James Manning // REFERENCE: https://gist.github.com/jamesmanning/2622054 private static readonly string ClientRequestString = "Some HTTP request here"; private static readonly byte[] ClientRequestBytes = Encoding.UTF8.GetBytes(ClientRequestString); private static readonly string ServerResponseString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><document><userkey>key</userkey> <machinemode>1</machinemode><serial>0000</serial><unitname>Device</unitname><version>1</version></document>\n"; private static readonly byte[] ServerResponseBytes = Encoding.UTF8.GetBytes(ServerResponseString); private static string url = "127.0.0.1"; //localhost private static int port = 1234; static void Main(string[] args) StartListener(); ConnectAsTcpClient(); Console.WriteLine("\n[Main] Done...\n"); Console.ReadLine(); }

Client/Server NetworkStream (Socket) private static async void ConnectAsTcpClient() { using (var tcpClient = new TcpClient()) Console.WriteLine("[Client] Connecting to server"); await tcpClient.ConnectAsync(url, port); Console.WriteLine("[Client] Connected to server"); using (var networkStream = tcpClient.GetStream()) Console.WriteLine("[Client] Writing request {0}", ClientRequestString ); await networkStream.WriteAsync(ClientRequestBytes, 0, ClientRequestBytes.Length); var buffer = new byte[4096]; var byteCount = await networkStream.ReadAsync(buffer, 0, buffer.Length); var response = Encoding.UTF8.GetString(buffer, 0, byteCount); Console.WriteLine("[Client] Server response was:\n\n{0}", response); }

Client/Server NetworkStream (Sockets) private static async void StartListener() { var tcpListener = TcpListener.Create(port); tcpListener.Start(); var tcpClient = await tcpListener.AcceptTcpClientAsync(); Console.WriteLine("[Server] Client has connected"); using (var networkStream = tcpClient.GetStream()) var buffer = new byte[4096]; Console.WriteLine("[Server] Reading from client"); var byteCount = await networkStream.ReadAsync(buffer, 0, buffer.Length); var request = Encoding.UTF8.GetString(buffer, 0, byteCount); Console.WriteLine("[Server] Client wrote: {0}", request); await networkStream.WriteAsync(ServerResponseBytes, 0, ServerResponseBytes.Length); Console.WriteLine("[Server] Response has been written"); }