240 likes | 400 Views
BİL527 – Bilgisayar Programlama I. File Operations. Contents. Structure of a File Reading/Writing Texts from/to Files File and Directory Operations. Definition of File. A file is a logically contiguous stream of bytes with certain properties Name Size (Number of bytes in the file)
E N D
BİL527 – Bilgisayar Programlama I File Operations
Contents • Structure of a File • Reading/Writing Texts from/to Files • File and Directory Operations
Definition of File • A file is a logically contiguous stream of bytes with certain properties • Name • Size (Number of bytes in the file) • Owner (The user who owns the file) • Permission (Who can access the file) • Creation date • Last modification date • etc.
File Types • Text Files • In a text file, the byte represent characters making it possible for a human to examine the file or edit it using a text editor • Files which can be opened by Notepad • C# source codes • Binary Files • In a binary file, bytes do not necessarily represent characters. Groups of bytes might represent an int, float, double, etc. • Executable files • Word, Excel, PowerPoint files • Files which can’t be opened by Notepad
Byte # 0 1 Byte # 0 1 2 3 4 BinaryFileEx.dat 2 bytes long 0x30 0x75 TextFileEx.txt 5 bytes long ‘3’ ‘0’ ‘0’ ‘0’ ‘0’ Text File vs. Binary File • Consider how we can store short int30000 = 0x7530, which occupies 2 bytes in memory • One option is to store the number in text form as chars ‘3’, ‘0’, ‘0’, ‘0’, ‘0’ • Using ASCII chars, we need 5 bytes to store this number • The other option is to store the number in binary, which would take as few as 2 bytes • Assumes little-endian representation
Text File vs. Binary File • Why distinguish between text and binary files? • The reason is some operating systems, e.g., Windows stores text files and binary files in different ways • Text files are divided into lines, so there must be some special way o mark the end of each line • Binary files are easy to use by programs and text files are easy to understand for humans
File Operations • Creating a new file • Appending to an existing file • Reading an existing file
Creating a Text File • Create a StreamWriterobject by specifying a file path • Use functions Writeand WriteLineto write into the file, just like printing on the screen • Close the file
Example using System.IO; namespace FileOpDeneme { class Program { static void Main(string[] args) { StreamWritersw = new StreamWriter("Test.txt"); sw.WriteLine("Roses are red"); sw.WriteLine("Violets are blue"); sw.Close(); } } }
Appending to a Text File • When you create a StreamWriterobject by new StreamWriter(filename), and file exists, then the file contents are deleted • If you want to append to an existing file, use another constructor of StreamWriterclass, which is StreamWriter(string path, bool append)
Example using System.IO; namespace FileOpDeneme { class Program { static void Main(string[] args) { StreamWritersw = new StreamWriter("Test.txt", true); sw.WriteLine("Sugar is sweet"); sw.WriteLine("And so are you"); sw.Close(); } } }
Reading an Existing File • Create a StreamReaderobject by specifying the file path • Use ReadLine() method to read a single line, or ReadToEnd() method to read all contents of the file • Close the file
Example usingSystem; using System.IO; namespaceFileOpDeneme{ classProgram { staticvoid Main(string[] args) { StreamReadersr = new StreamReader("Test.txt"); stringcontents = sr.ReadToEnd(); Console.WriteLine(contents); sr.Close(); } } }
using • The files should be closed immediately after finishing work on them • If you forget to close a file, some problems may occur • If you use the file inside a usingblock, it is automatically closed, i.e. all of its resources are released
Example using System; using System.IO; namespace FileOpDeneme { class Program { static void Main(string[] args) { string contents; using (StreamReadersr = new StreamReader("Test.txt")) { contents = sr.ReadToEnd(); } Console.WriteLine(contents); } } }
Path Names and Relative Paths • If you don’t specify the path of a file, it is searched in the current directory, i.e. the directory where your executable file is located • You can learn the current directory by the method Directory.GetCurrentDirectory() • You can set the working directory by Directory.SetCurrentDirectory() • You can specify the full path of the file like @“C:\MyPrograms\BIL527\Test.txt”
The FileStream Object • With StreamReaderand StreamWriterobjects, you can work only on characters • If you need to work on bytes, you have to use a FileStreamobject • On a FileStreamobject, you can goforward or backward on the file, and read from or write to anywhere on the file
Obtaining File and Directory Information • The FileInfoclass can be used to obtain information about a specific file FileInfo info = new FileInfo(“Test.txt”); info.Attributes, info.CreationTime, info.LastAccessTime, info.LastWriteTime, info.Length, etc. • If you want to obtain information about a directory, you can use the DirectoryInfoclass DirectoryInfo info = new DirectoryInfo(@“c:\”); info.Parent, info.Root, info.GetFiles(), info.GetDirectories(), etc.
File System Operations • File.Copy(src, dest): src is copied to dest • File.Move(src, dest): src is moved to dest • File.Delete(filename): Deletes the file • File.Exists(file): Returns true if file exists • Check for other static methods in the File class
Directory Operations • Directory.CreateDirectory() • Directory.Delete() • Directory.Exists() • Directory.Move() • Directory.GetCurrentDirectory() • Directory.SetCurrentDirectory() • Directory.GetLogicalDrives() • etc.
Monitoring the File System • Your program can be notified when a file or directory is being modified • For this purpose, you can use the FileSystemWatcherclass • For more information, you may refer to the textbook, MSDN help, or Google
Compressed Files • You can use DeflateStreamand GZipStreamclasses to read and write compressed data from and to files • These classes work with byte data much like FileStream • The classes are located under the System.IO.Compression namespace • For more information, refer to the textbook, MSDN help, or Google
Binary Files • You can use BinaryReaderand BinaryWriterclasses to work on binary files • You can serializeobjects so that they can be saved to or read from files • Refer as Serialization • For more information, refer to the textbook, MSDN help, or Google