EEM336 * Microprocessors I

advertisement
BİL527 – Bilgisayar Programlama I
File Operations
1
Contents
• Structure of a File
• Reading/Writing Texts from/to Files
• File and Directory Operations
2
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.
3
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
4
Text File vs. Binary File
• Consider how we can store short int 30000 =
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
Byte #
0
1
2
3
4
‘3’
‘0’
‘0’
‘0’
‘0’
TextFileEx.txt
5 bytes long
– The other option is to store the number in binary,
which would take as few as 2 bytes
Byte #
0
1
0x30 0x75
BinaryFileEx.dat
2 bytes long
Assumes little-endian representation
5
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
6
File Classes in .NET Framework
7
File Operations
• Creating a new file
• Appending to an existing file
• Reading an existing file
8
Creating a Text File
• Create a StreamWriter object by specifying a
file path
• Use functions Write and WriteLine to write
into the file, just like printing on the screen
• Close the file
9
Example
using System.IO;
namespace FileOpDeneme {
class Program {
static void Main(string[] args) {
StreamWriter sw = new StreamWriter("Test.txt");
sw.WriteLine("Roses are red");
sw.WriteLine("Violets are blue");
sw.Close();
}
}
}
10
Appending to a Text File
• When you create a StreamWriter object 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 StreamWriter class,
which is StreamWriter(string path, bool
append)
11
Example
using System.IO;
namespace FileOpDeneme {
class Program {
static void Main(string[] args) {
StreamWriter sw = new StreamWriter("Test.txt", true);
sw.WriteLine("Sugar is sweet");
sw.WriteLine("And so are you");
sw.Close();
}
}
}
12
Reading an Existing File
• Create a StreamReader object 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
13
Example
using System;
using System.IO;
namespace FileOpDeneme {
class Program {
static void Main(string[] args) {
StreamReader sr = new StreamReader("Test.txt");
string contents = sr.ReadToEnd();
Console.WriteLine(contents);
sr.Close();
}
}
}
14
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 using block, it is
automatically closed, i.e. all of its resources
are released
15
Example
using System;
using System.IO;
namespace FileOpDeneme {
class Program {
static void Main(string[] args) {
string contents;
using (StreamReader sr = new StreamReader("Test.txt"))
{
contents = sr.ReadToEnd();
}
Console.WriteLine(contents);
}
}
}
16
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”
17
The FileStream Object
• With StreamReader and StreamWriter
objects, you can work only on characters
• If you need to work on bytes, you have to use
a FileStream object
• On a FileStream object, you can go forward or
backward on the file, and read from or write
to anywhere on the file
18
Obtaining File and Directory Information
• The FileInfo class 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 DirectoryInfo class
DirectoryInfo info = new DirectoryInfo(@“c:\”);
info.Parent, info.Root, info.GetFiles(),
info.GetDirectories(), etc.
19
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
20
Directory Operations
•
•
•
•
•
•
•
•
Directory.CreateDirectory()
Directory.Delete()
Directory.Exists()
Directory.Move()
Directory.GetCurrentDirectory()
Directory.SetCurrentDirectory()
Directory.GetLogicalDrives()
etc.
21
Monitoring the File System
• Your program can be notified when a file or
directory is being modified
• For this purpose, you can use the
FileSystemWatcher class
• For more information, you may refer to the
textbook, MSDN help, or Google
22
Compressed Files
• You can use DeflateStream and GZipStream
classes 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
23
Binary Files
• You can use BinaryReader and BinaryWriter
classes to work on binary files
• You can serialize objects 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
24
Download