💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 如何:创建文件或文件夹(C# 编程指南) 您可通过编程方式在您的计算机上创建文件夹、子文件夹和子文件夹中的文件,并将数据写入文件。 ``` 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 } ``` 如果该文件夹已存在,则 [CreateDirectory](https://msdn.microsoft.com/zh-cn/library/system.io.directory.createdirectory.aspx) 不执行任何操作,且不会引发异常。但是,[File.Create](https://msdn.microsoft.com/zh-cn/library/system.io.file.create.aspx) 用新的文件替换现有文件。该示例使用一个 **if**-**else** 语句阻止现有文件被替换。 通过在示例中做出以下更改,您可以根据具有某个名称的程序是否存在来指定不同的结果。如果该文件不存在,代码将创建一个文件。如果该文件存在,代码将把数据添加到该文件中。 * 指定一个非随机文件名。 ``` // Comment out the following line. //string fileName = System.IO.Path.GetRandomFileName(); // Replace that line with the following assignment. string fileName = "MyNewFile.txt"; ``` * 用以下代码中的 **using** 语句替换 **if**-**else** 语句。 ``` using (System.IO.FileStream fs = new System.IO.FileStream(pathString, FileMode.Append)) { for (byte i = 0; i &lt; 100; i++) { fs.WriteByte(i); } } ``` 运行该示例若干次以验证数据是否每次都添加到文件中。 有关更多可以尝试的 **FileMode** 值的信息,请参阅 [FileMode](https://msdn.microsoft.com/zh-cn/library/system.io.filemode.aspx)。 以下情况可能会导致异常: * 文件夹名称格式不正确。例如,它包含非法字符或仅仅是空白([ArgumentException](https://msdn.microsoft.com/zh-cn/library/system.argumentexception.aspx) 类)。使用 [Path](https://msdn.microsoft.com/zh-cn/library/system.io.path.aspx) 类创建有效路径名。 * 要创建的文件夹的父文件夹是只读的([IOException](https://msdn.microsoft.com/zh-cn/library/system.io.ioexception.aspx) 类)。 * 文件夹名称是 **null**([ArgumentNullException](https://msdn.microsoft.com/zh-cn/library/system.argumentnullexception.aspx) 类)。 * 文件夹名称太长([PathTooLongException](https://msdn.microsoft.com/zh-cn/library/system.io.pathtoolongexception.aspx) 类)。 * 文件夹名称只是冒号“:”([PathTooLongException](https://msdn.microsoft.com/zh-cn/library/system.io.pathtoolongexception.aspx) 类)。 ## .NET Framework 安全性 在部分信任的情况下可能会引发 [SecurityException](https://msdn.microsoft.com/zh-cn/library/system.security.securityexception.aspx) 类的实例。 如果没有创建文件夹的权限,则该示例引发 [UnauthorizedAccessException](https://msdn.microsoft.com/zh-cn/library/system.unauthorizedaccessexception.aspx) 类的实例。 ## 请参阅 [System.IO](https://msdn.microsoft.com/zh-cn/library/system.io.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [文件系统和注册表(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/2kzb96fk.aspx)