Tuesday, June 5, 2012

File Management


Create, Read, Write, Copy, Move and Delete a Text File using C# and VB.NET
 
In this article, we will explore some common text file operations using C# and VB.NET. This article has been requested by a long time reader of dotnetcurry.com. NET provides various classes like the File and FileInfo, to create, read, write and perform such similar operations on a text file. For example, you can use the Create() method of the File class to create a text file. The same could also be done using the CreateText() method of the FileInfo class. Similarly these classes also contain functionality to copy, move or delete a file. The trick is to find out when to use which class and for what purpose.
The ‘File’ class contains static methods and performs security checks on all the methods. The FileInfo contains instance methods and security check is not necessary. So this method is useful if you plan to use the same instance of the class in multiple operations.
However for copying, moving or deleting the files, the static methods are faster. Moreover, the Garbage Collector has less work to do when you use the File class, since the methods are static.
For reading and writing text files, we have some abstract classes like the TextReader and TextWriter classes. There are some useful classes like the StreamReader, StringReader, StreamWriter and StringWriter that derive from these abstract classes.
This article is by no means a comprehensive guide to demonstrate the capabilities of these classes. It should be treated as a ‘How do I’ kind of a series to demonstrate some of the capabilities of these classes. I will be giving some references at the end of this article, which should be read to gain a better understanding of these classes. Let us now see some code which demonstrates how to use these classes.
Before you go ahead and use these methods, declare a class variable called ‘fileLoc’ which contains the filepath of the text file.
C#
string fileLoc = @"c:\sample1.txt";
VB.NET
Dim fileLoc As String = "c:\sample1.txt"
You would also need to reference the System.IO namespace in your project.
 
Create a Text File
 
C#
       // Create a Text File
        private void btnCreate_Click(object sender, EventArgs e)
        {
            FileStream fs = null;
            if (!File.Exists(fileLoc))
            {
                using (fs = File.Create(fileLoc))
                {
 
                }
            }
        }
VB.NET
         ' Create a Text File
            Private Sub btnCreate_Click(ByVal sender As ObjectByVal e As EventArgs)
                  Dim fs As FileStream = Nothing
                  If (Not File.Exists(fileLoc)) Then
                        fs = File.Create(fileLoc)
                        Using fs
 
                        End Using
                  End If
            End Sub
 
Write to a Text File
 
C#
        // Write to a Text File
        private void btnWrite_Click(object sender, EventArgs e)
        {
            if (File.Exists(fileLoc))
            {
                using (StreamWriter sw = new StreamWriter(fileLoc))
                {
                    sw.Write("Some sample text for the file");                  
                }
            }
        }
 
VB.NET
            ' Write to a Text File
            Private Sub btnWrite_Click(ByVal sender As ObjectByVal e As EventArgs)
                  If File.Exists(fileLoc) Then
                        Using sw As StreamWriter = New StreamWriter(fileLoc)
                              sw.Write("Some sample text for the file")
                        End Using
                  End If
            End Sub
 
Read From a Text File
 
C#
        // Read From a Text File
        private void btnRead_Click(object sender, EventArgs e)
        {
            if (File.Exists(fileLoc))
            {
                using (TextReader tr = new StreamReader(fileLoc))
                {
                    MessageBox.Show(tr.ReadLine());
                }
            }
        }
VB.NET
            ' Read From a Text File
            Private Sub btnRead_Click(ByVal sender As ObjectByVal e As EventArgs)
                  If File.Exists(fileLoc) Then
                        Using tr As TextReader = New StreamReader(fileLoc)
                              MessageBox.Show(tr.ReadLine())
                        End Using
                  End If
            End Sub
 
Copy a Text File
 
C#
        // Copy a Text File
        private void btnCopy_Click(object sender, EventArgs e)
        {
            string fileLocCopy = @"d:\sample1.txt";
            if (File.Exists(fileLoc))
            {
                // If file already exists in destination, delete it.
                if (File.Exists(fileLocCopy))
                    File.Delete(fileLocCopy);
                File.Copy(fileLoc, fileLocCopy);
            }
        }
VB.NET
            ' Copy a Text File
            Private Sub btnCopy_Click(ByVal sender As ObjectByVal e As EventArgs)
                  Dim fileLocCopy As String = "d:\sample1.txt"
                  If File.Exists(fileLoc) Then
                        ' If file already exists in destination, delete it.
                        If File.Exists(fileLocCopy) Then
                              File.Delete(fileLocCopy)
                        End If
                        File.Copy(fileLoc, fileLocCopy)
                  End If
            End Sub
 
Move a Text File
 
C#
        // Move a Text file
        private void btnMove_Click(object sender, EventArgs e)
        {
            // Create unique file name
            string fileLocMove = @"d:\sample1" + System.DateTime.Now.Ticks + ".txt";
            if (File.Exists(fileLoc))
            {
                File.Move(fileLoc, fileLocMove);
            }
        }
VB.NET
            ' Move a Text file
            Private Sub btnMove_Click(ByVal sender As ObjectByVal e As EventArgs)
                  ' Create unique file name
                  Dim fileLocMove As String = "d:\sample1" & System.DateTime.Now.Ticks & ".txt"
                  If File.Exists(fileLoc) Then
                        File.Move(fileLoc, fileLocMove)
                  End If
            End Sub
 
Delete a Text File
 
C#
       // Delete a text file
        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (File.Exists(fileLoc))
            {
                File.Delete(fileLoc);
            }
        }
VB.NET
         ' Delete a text file
            Private Sub btnDelete_Click(ByVal sender As ObjectByVal e As EventArgs)
                  If File.Exists(fileLoc) Then
                        File.Delete(fileLoc)
                  End If
            End Sub
 



Another Example


Here is a simple general way to write to a text file:
  1. // FileWrite - write input from the Console into a text file
  2. using System;
  3. using System.IO;
  4. namespace FileWrite
  5. {
  6. public class Class1
  7. {
  8. public static void Main(string[] args)
  9. {
  10. // create the filename object - the while loop allows
  11. // us to keep trying with different filenames until
  12. // we succeed
  13. StreamWriter sw = null;
  14. string sFileName = "";
  15. while(true)
  16. {
  17. try
  18. {
  19. // enter output filename (simply hit Enter to quit)
  20. Console.Write("Enter filename "
  21. + "(Enter blank filename to quit):");
  22. sFileName = Console.ReadLine();
  23. if (sFileName.Length == 0)
  24. {
  25. // no filename - this jumps beyond the while
  26. // loop to safety
  27. break;
  28. }
  29. // open file for writing; throw an exception if the
  30. // file already exists:
  31. // FileMode.CreateNew to create a file if it
  32. // doesn't already exist or throw
  33. // an exception if file exists
  34. // FileMode.Append to create a new file or append
  35. // to an existing file
  36. // FileMode.Create to create a new file or
  37. // truncate an existing file
  38. // FileAccess possibilities are:
  39. // FileAccess.Read,
  40. // FileAccess.Write,
  41. // FileAccess.ReadWrite
  42. FileStream fs = File.Open(sFileName,
  43. FileMode.CreateNew,
  44. FileAccess.Write);
  45. // generate a file stream with UTF8 characters
  46. sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
  47. // read one string at a time, outputting each to the
  48. // FileStream open for writing
  49. Console.WriteLine("Enter text; enter blank line to stop");
  50. while(true)
  51. {
  52. // read next line from Console;
  53. // quit if line file is blank
  54. string sInput = Console.ReadLine();
  55. if (sInput.Length == 0)
  56. {
  57. break;
  58. }
  59. // write the line just read to output file
  60. sw.WriteLine(sInput);
  61. }
  62. // close the file we just created
  63. sw.Close();
  64. sw = null;
  65. }
  66. catch(IOException fe)
  67. {
  68. // whoops -- an error occurred somewhere during
  69. // the processing of the file - tell the user
  70. // what the full name of the file is:
  71. // take the path name onto the filename
  72. string sDir = Directory.GetCurrentDirectory();
  73. string s = Path.Combine(sDir, sFileName);
  74. Console.WriteLine("Error on file {0}", s);
  75. // now output the error message in the exception
  76. Console.WriteLine(fe.Message);
  77. }
  78. }
  79. // wait for user to acknowledge the results
  80. Console.WriteLine("Press Enter to terminate...");
  81. Console.Read();
  82. }
  83. }
  84. }

1 comment:

  1. I have read many article here and learn many things from that, this was really helpful for me. Thank you so much for sharing this info with us and share your ideas with us.
    Document Management Software
    Electronic Document Management System
    Document Management System
    Cloud Document Management Software

    ReplyDelete