How to: Create a File or Folder (C# Programming Guide)

You can programmatically create a folder on your computer, create a subfolder, create a file in the subfolder, and write data to the file.

Example

public class CreateFileOrFolder
{
    static void Main()
    {
        // Specify a name for your top-level folder. 
        string folderName = @"c:\Top-Level Folder";

        // To create a string that specifies the path to a subfolder under your  
        // top-level folder, add a name for the subfolder to folderName. 
        string pathString = System.IO.Path.Combine(folderName, "SubFolder");

        // You can write out the path name directly instead of using the Combine 
        // method. Combine just makes the process easier. 
        string pathString2 = @"c:\Top-Level Folder\SubFolder2";

        // You can extend the depth of your path if you want to. 
        //pathString = System.IO.Path.Combine(pathString, "SubSubFolder");

        // Create the subfolder. You can verify in File Explorer that you have this 
        // structure in the C: drive. 
        //    Local Disk (C:) 
        //        Top-Level Folder 
        //            SubFolder
        System.IO.Directory.CreateDirectory(pathString);

        // Create a file name for the file you want to create.  
        string fileName = System.IO.Path.GetRandomFileName();

        // This example uses a random string for the name, but you also can specify 
        // a particular name. 
        //string fileName = "MyNewFile.txt";

        // Use Combine again to add the file name to the path.
        pathString = System.IO.Path.Combine(pathString, fileName);

        // Verify the path that you have constructed.
        Console.WriteLine("Path to my file: {0}\n", pathString);

        // Check that the file doesn't already exist. If it doesn't exist, create 
        // the file and write integers 0 - 99 to it. 
        // DANGER: System.IO.File.Create will overwrite the file if it already exists. 
        // This could happen even with random file names, although it is unlikely. 
        if (!System.IO.File.Exists(pathString))
        {
            using (System.IO.FileStream fs = System.IO.File.Create(pathString))
            {
                for (byte i = 0; i < 100; i++)
                {
                    fs.WriteByte(i);
                }
            }
        }
        else
        {
            Console.WriteLine("File \"{0}\" already exists.", fileName);
            return;
        }

        // Read and display the data from your file. 
        try
        {
            byte[] readBuffer = System.IO.File.ReadAllBytes(pathString);
            foreach (byte b in readBuffer)
            {
                Console.Write(b + " ");
            }
            Console.WriteLine();
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine(e.Message);
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
    // Sample output: 

    // Path to my file: c:\Top-Level Folder\SubFolder\ttxvauxe.vv0 

    //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
    //30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 
    // 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 8 
    //3 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
}

If the folder already exists, CreateDirectory does nothing, and no exception is thrown. However, File.Create replaces an existing file with a new file. The example uses an if-else statement to prevent an existing file from being replaced.

By making the following changes in the example, you can specify different outcomes based on whether a file with a certain name already exists. If such a file doesn't exist, the code creates one. If such a file exists, the code appends data to that file.

  • Specify a non-random file name.

    // Comment out the following line.
    //string fileName = System.IO.Path.GetRandomFileName();
    
    // Replace that line with the following assignment.
    string fileName = "MyNewFile.txt";
    
  • Replace the if-else statement with the using statement in the following code.

    using (System.IO.FileStream fs = new System.IO.FileStream(pathString, FileMode.Append)) 
    {
        for (byte i = 0; i < 100; i++)
        {
            fs.WriteByte(i);
        }
    }
    

Run the example several times to verify that data is added to the file each time.

For more FileMode values that you can try, see FileMode.

The following conditions may cause an exception:

Security

An instance of the SecurityException class may be thrown in partial-trust situations.

If you don’t have permission to create the folder, the example throws an instance of the UnauthorizedAccessException class.

See Also

Reference

System.IO

Concepts

C# Programming Guide

Other Resources

File System and the Registry (C# Programming Guide)