Showing posts with label FileStream. Show all posts
Showing posts with label FileStream. Show all posts

Sunday, February 12, 2012

Working with Path Class in .Net (C#)


Path class is static class and has collection of static methods and fields. Path class is available in System.IO namespace. Path provides the location of file or folder located on disk. Path class used to perform operations like getting file name and extension part of the URL, combining two strings into single path, getting temp directory path etc. Let's have a look on major operations using Path.

string path = @"d:\temp\test.txt";

Console.WriteLine("File Name: {0}",Path.GetFileName(path));
Console.WriteLine("Full Path: {0}",Path.GetFullPath(path));
Console.WriteLine("Extension: {0}",Path.GetExtension(path));
Console.WriteLine("Directory Name: {0}",Path.GetDirectoryName(path));
Console.WriteLine("Path Root: {0}",Path.GetPathRoot(path));
Console.WriteLine("File Name w/o extn: {0}",Path.GetFileNameWithoutExtension(path));
Console.WriteLine("Has Extn: {0}",Path.HasExtension(path));
Console.WriteLine("Temp Path: {0}", Path.GetTempPath());
Console.WriteLine("Directory Seperator: {0}", Path.AltDirectorySeparatorChar);
Console.WriteLine("Volume Seperator: {0}", Path.VolumeSeparatorChar);
Console.WriteLine("Combine : {0}", Path.Combine("Dir1","File1.txt"));


Output –
File Name: test.txt
Full Path: d:\temp\test.txt
Extension: .txt
Directory Name: d:\temp
Path Root: d:\
File Name w/o extn: test
Has Extn: True
Temp Path: C:\Users\msureja\AppData\Local\Temp\
Directory Seperator: /
Volume Seperator: :
Combine : Dir1\File1.txt

See Also - 


Saturday, February 11, 2012

Working with Directory Class in .Net (C#)



Directory class is static class provides static methods to do normal directory related operations such as Copy, Paste, Move, Rename, Delete etcIt is available in System.IO namespace.  Below code demonstrates some basic majorly used methods of directory class.


//Creates temp directory if not exist
if (!Directory.Exists(@"d:\temp"))
    Directory.CreateDirectory(@"d:\temp");

//set/get current directory
Directory.SetCurrentDirectory(@"d:\temp");
Console.WriteLine(Directory.GetCurrentDirectory());

//gets root of directory
Console.WriteLine(Directory.GetDirectoryRoot(@"d:\temp"));

//gets creation and last modified time of directory
Console.WriteLine(Directory.GetCreationTime(@"d:\temp"));
Console.WriteLine(Directory.GetLastWriteTime(@"d:\temp"));
           
//enumerates all files available in temp directory          
foreach (string file in Directory.EnumerateFiles(@"d:\temp"))
    Console.WriteLine(file);

//enumerates all directories available in temp directory
foreach (string directory in Directory.EnumerateDirectories(@"d:\temp"))
    Console.WriteLine(directory);

//enumerates all logical drives
foreach (string drive in Directory.GetLogicalDrives())
    Console.WriteLine(drive);

//deletes an empty directory. if not empty throws an exception
Directory.Delete(@"d:\temp");


Enumerate files and folders using DirectoryInfo
DirectoryInfo class provides some basic features to create, copy, move, rename and delete operations. It also provides some basic information like directory name, full path, attribute, root name etc. Let’s have a look on below code which loop through all the files and directories in specific directory.


DirectoryInfo di = new DirectoryInfo(@"d:\temp");
Console.WriteLine(di.FullName);

//gets all files in temp directory
foreach (FileInfo file in di.GetFiles())
    Console.WriteLine(file.Name);
//gets all directories in temp directory
foreach (DirectoryInfo dir in di.GetDirectories())
    Console.WriteLine(dir.Name);


How to get Special Folders?
Special folders are defined under Environment.SpecialFolder enum. This enum is available in System.Environment class. Let’s see how to get path for special folders like MyDocuments, MyPictures, Desktop, ProgramFiles, System, Windows etc.

Console.WriteLine("My Documents - {0}", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
Console.WriteLine("My Videos - {0}", Environment.GetFolderPath(Environment.SpecialFolder.MyVideos));
Console.WriteLine("Windows - {0}", Environment.GetFolderPath(Environment.SpecialFolder.Windows));
Console.WriteLine("ProgramFiles - {0}", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));
Console.WriteLine("System - {0}", Environment.GetFolderPath(Environment.SpecialFolder.System));

Output –
My Documents - D:\Users\mitesh\Documents
My Videos - D:\Users\mitesh\Videos
Windows - C:\WINDOWS
ProgramFiles - C:\Program Files
System - C:\WINDOWS\system32

//Enumerates all SpecialFolders available in Enviroment.SpecialFolder enum
foreach (var specialFolder in Enum.GetValues(typeof(Environment.SpecialFolder)))
    Console.WriteLine(specialFolder);

Output –
Desktop
Programs
MyDocuments
Favorites
Startup
Recent
SendTo
StartMenu

Working with File Class in .Net (C#)


File class is static class provides static methods to do normal file related operationsIt is available in System.IO namespaceFile class used to do some file related operations like Copy, Paste, Move, Replace, Delete etc. Let’s have a look on below code.

string filePath = @"D:\Temp\Test.txt";
//Checkes whether Test.txt file is exists or not
if (File.Exists(filePath))
{
    //Copies Test.txt file to TestCopy.txt.
    File.Copy(filePath, @"D:\Temp\TestCopy.txt", true);
    //Moves Test.txt file to TestMove.txt.
    //Throws an exception if file already exists.
    File.Move(filePath, @"D:\Temp\TestMove.txt");
    //Replace TextMove.txt file with TextCopy.txt file with
    //provisional backup file TestBKP.txt.
    File.Replace(@"D:\Temp\TestMove.txt", @"D:\Temp\TestCopy.txt", @"D:\Temp\TestBKP.txt");      

    //Deletes TextBKP.txt file.
    //Throws an exception if file is readonly.
    File.Delete(@"D:\Temp\TestBKP.txt");
}
else
{
    //Creates new file named Test.txt
    File.Create(filePath);
}

Getting File Attributes

File class provides SetAttributes and GetAttributes methods to set attributes to file. The file attributes enum contains value like Archieve, Normal, Hidden, ReadOnly etc. We can change file attributes using Get/Set attributes method of File Class. Let’s have a look on below code.

//sets hidden attribute to Text.txt file.
File.SetAttributes(@"d:\temp\Test.txt", FileAttributes.Hidden);

//returns attributes of Test.txt
FileAttributes fileAttribute = File.GetAttributes(@"d:\temp\Test.txt");

if ((fileAttribute & FileAttributes.Hidden) == FileAttributes.Hidden)
    Console.WriteLine("This file is hidden");
else
    Console.WriteLine("this file is not hidden");


Getting Creation/Modification Times

File class provides methods to get creation time and modified time of file.

Method Name
Description
GetCreationTime
Gets creation time of specified file.
GetLastWriteTime
Gets last modified date time of specified file
GetLastAccessTime
Gets last accessed date time of specified file.
SetCreationTime
Sets creation date and time to file.
SetLastWriteTime
Sets last write date and time to file.
SetLastAccessTime
Sets last accessed date and time to file.

Let’s have a look on below code.

//Gets creation time of specified file.
DateTime createdTime = File.GetCreationTime(@"d:\temp\Test.txt");
Console.WriteLine(createdTime.ToString());

//Gets last modified date time of specified file.
DateTime modifiedTime = File.GetLastWriteTime(@"d:\temp\Test.txt");
Console.WriteLine(modifiedTime.ToString());

//Gets last accessed date time of specified file.
DateTime lastAccessTime = File.GetAccessTime(@"d:\temp\Test.txt");
Console.WriteLine(lastAccessTime.ToString());

//Sets creation date and time to file.
File.SetCreationTime(@"d:\temp\Test.txt", DateTime.Now);

//Sets last accessed date and time to file.
File.SetLastAccessTime(@"d:\temp\Test.txt", DateTime.Now.AddMinutes(5));

//Sets last write date and time to file.
File.SetLastWriteTime(@"d:\temp\Test.txt", DateTime.Now.AddMinutes(10));

Output –
20-01-2012 08:09:37 PM
20-01-2012 08:19:37 PM
20-01-2012 08:14:37 PM

Encrypt / Decrypt file

Encrypt method of file class can encrypt file or directory while Decrypt method of file class can decrypt file. Using Encrypt and Decrypt we can protect file or folder from unwanted access.

File.Encrypt(@"d:\temp\test.txt");
File.Decrypt(@"d:\temp\test.txt");



When file encrypted the file name appears as green color in window 7. When file decrypted it will be appear as normal.

FileInfo Class

FileInfo class provides method to get file related information such as length, name, directory name, extension etc. Let’s have a look on below code.

FileInfo fileInfo = new FileInfo(@"d:\temp\test.txt");
Console.WriteLine("Name - {0}", fileInfo.Name);
Console.WriteLine("Full Name - {0}", fileInfo.FullName);
Console.WriteLine("Directory Name - {0}", fileInfo.DirectoryName);
Console.WriteLine("File Length - {0}", fileInfo.Length);
Console.WriteLine("File Extension - {0}", fileInfo.Extension);
Console.WriteLine("File Attributes - {0}", fileInfo.Attributes);
Console.WriteLine("Created On - {0}", fileInfo.CreationTime);
Console.WriteLine("Modified On - {0}", fileInfo.LastWriteTime);

Output -
Name - test.txt
Full Name - d:\temp\test.txt
Directory Name - d:\temp
File Length - 9
File Extension - .txt
File Attributes - Archive
Created On - 20-01-2012 08:14:48 PM
Modified On - 20-01-2012 08:18:04 PM




Monday, January 23, 2012

FileStream in .Net (C#)


FileStream class can be used to read / write data to files. FileStream class is derived from abstract Stream class. FileStream supports synchronous or asynchronous read/write operations. By default FileStream opens file synchronously. FileStream also supports random access using seek method. You can open file by passing string file name (path) to FileStream constructor. You can also specify FileMode and FileAccess along with filename. FileMode specifies how file should open while FileAccess specifies file should open for Read or Write or Both operations


Below is the details about FileMode and FileAccess enum.

FileModes
Description
Open
Opens an existing file for writing.
OpenOrCreate
Opens an existing file if not found creates new.
Create
Creates new file, if exists it will be overwrite.
CreateNew
Creates new file, if already exists throws an error.
Append
Opens an existing file and seek to end. If not exists creates new file.

FileAccess
Description
Read
Allows only read from file.
Write
Allows only write to file.
ReadWrite
Allows read/write to file.

Below examples shows how we can use FileModes and FileAccesss with FileStream.

//Opens an existing file for read operations
FileStream fs = new FileStream(@"d:\temp\test.txt", FileMode.Open, FileAccess.Read);

//Opens an existing file for write operations
FileStream fs = new FileStream(@"d:\temp\test.txt", FileMode.Open, FileAccess.Write);

//Opens an existing file for read/write operations
FileStream fs = new FileStream(@"d:\temp\test.txt", FileMode.Open, FileAccess.ReadWrite);

//creates new file, if exists it will be overwritten
FileStream fs = new FileStream(@"d:\temp\test.txt", FileMode.Create);

//Opens an existing file and seek to end. if not exists creates new file.
FileStream fs = new FileStream(@"d:\temp\test.txt", FileMode.Append);

Read/Write data using FileStream Read/Write methods.

//Write data
using (FileStream fs = new FileStream(@"d:\temp\test.txt", FileMode.Create, FileAccess.Write))
{
    string start = "Hello World!!!";

    byte[] byts = System.Text.Encoding.ASCII.GetBytes(start);

    fs.Write(byts, 0, byts.Length);
}

//Read data
using (FileStream fs = new FileStream(@"d:\temp\test.txt", FileMode.Open, FileAccess.Read))
{
    byte[] byts = new byte[1024];
    while (fs.Read(byts, 0, byts.Length) > 0)
    {
        Console.WriteLine(System.Text.Encoding.ASCII.GetString(byts));
    }
}

Output –



See Also - 

Friday, January 20, 2012

BinaryReader and BinaryWriter in .Net (C#)


BinaryReader and BinaryWriter classes are available in System.IO namespace. BinaryReader and BinaryWriter classes are used to write primitive data types to file (primitive data types like int, decimal, float, double, long, short etc.). It also allows us to write strings and array of primitive data types along with primitive data types. The data stored inside file is not human readable because it’s stored in binary format. To store data in normal text you can use StreadReader and StreamWirter class instead. Please go through StreamReader and StreamWriter article for more information.


Read/Write text to file using BinaryReader and BinaryWriter

//writes data to test.bin file using binarywriter
using (BinaryWriter bw = new BinaryWriter(new FileStream(@"d:\Temp\test.bin", FileMode.Create)))
{
    for (int i = 0; i < 5; i++)
    {
        bw.Write(i);
    }
}

//reads data from test.bin file using binaryreader
using (BinaryReader br = new BinaryReader(new FileStream(@"d:\Temp\test.bin", FileMode.Open)))
{
    for (int i = 0; i < 5; i++)
    {
        br.ReadInt32();
    }
}

Output –

StreamReader and StreamWriter in .Net (C#)



StreamReader and StreamWriter classes are available in System.IO namespace. StreamWriter class used to write text (string) in file. StreamWriter class inherits from abstract TextWriter class. StreamReader class used to read text (string) from file. StreamReader class inherits from abstract TextReader class. 


Below are some useful methods of StreamReader and StreamWriter class.

Methods
Description
StreamWriter.Write
Writes text to file.
StreamWriter.WriteLine
Writes text to file, followed by line terminator.
StreamReader.Read
Reads text from file.
StreamReader.ReadLine
Reads line from file.

Read/Write text to file using StreamWriter.WriteLine and StreamReader.ReadLine

string[] names = new string[] { "Mitesh", "Jayesh", "Pritesh", "Kalpesh" };
void ReadWriteText()
{
    //write names to test.txt file
    using (StreamWriter sw = new StreamWriter(@"d:\Temp\Test.txt"))
    {
        foreach (string name in names)
            sw.WriteLine(name);
    }

    //read names from test.txt file
    using (StreamReader sr = new StreamReader(@"d:\Temp\Test.txt"))
    {
        string name = string.Empty;
        while ((name = sr.ReadLine()) != null)
        {
            Console.WriteLine(name);
        }
    }
}

Output –

Read/Write text from file using StreamReader.ReadLine and StreamWriter.Write


void ReadWriteText()
{
//write string/charactors to test.txt file
using (StreamWriter sw = new StreamWriter(@"d:\Temp\Test.txt"))
{
    foreach (char character in "Hello World!")
        sw.Write(character);
}

//read string/charactors from test.txt file
using (StreamReader sr = new StreamReader(@"d:\Temp\Test.txt"))
{
    string name = string.Empty;
    while ((name = sr.ReadLine()) != null)
    {
        Console.WriteLine(name);
    }
}
}

Output –