Compartir a través de


Cómo: Crear archivos o carpetas (Guía de programación de C#)

Puede crear mediante programación una carpeta en el equipo, crear una subcarpeta, crear un archivo en la subcarpeta y escribir datos en el archivo.

Ejemplo

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
}

Si la carpeta existe ya, CreateDirectory no hace nada y no se produce ninguna excepción. Sin embargo, File.Create reemplaza un archivo existente con un nuevo archivo. El ejemplo utiliza una instrucción if-else para evitar que un archivo existente se reemplace.

Si hace los cambios siguientes en el ejemplo, puede especificar resultados diferentes basándose en si ya existe un archivo con cierto nombre. Si ese archivo no existe, el código crea uno. Si existe ese archivo, el código anexa datos a ese archivo.

  • Especifique un nombre de archivo no aleatorio.

    // Comment out the following line.
    //string fileName = System.IO.Path.GetRandomFileName();
    
    // Replace that line with the following assignment.
    string fileName = "MyNewFile.txt";
    
  • Reemplace la instrucción if-else por la instrucción using en el código siguiente.

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

Ejecute el ejemplo varias veces para comprobar que los datos se agregan al archivo cada vez.

Para obtener más valores FileMode que puede probar, vea FileMode.

Las condiciones siguientes pueden provocar una excepción:

  • El nombre de la carpeta es incorrecto. Por ejemplo, contiene caracteres ilegales o está compuesto sólo por espacios en blanco (clase ArgumentException). Use la clase Path para crear nombres de ruta de acceso válidos.

  • La carpeta principal o la carpeta que se va a crear es de sólo lectura (clase IOException).

  • El nombre de la carpeta es null (clase ArgumentNullException).

  • El nombre de la carpeta es demasiado largo (clase PathTooLongException).

  • El nombre de carpeta contiene sólo un signo de dos puntos, ":" (clase PathTooLongException).

Seguridad

Una instancia de la clase SecurityException se puede producir en entornos de confianza parcial.

Si no tiene permiso para crear la carpeta, el ejemplo producirá una instancia de la clase UnauthorizedAccessException.

Vea también

Referencia

System.IO

Conceptos

Guía de programación de C#

Otros recursos

Registro y sistema de archivos (Guía de programación de C#)