我正在为C#阅读一些文件IO教程,并设法写出一些文件,但如果我给出的路径包含目录怎么办?
例如,我想创建名为data/my_file
except data
文件夹的文件不存在.
这条线,
BinaryWriter outFile = new BinaryWriter(File.OpenWrite(path));
Run Code Online (Sandbox Code Playgroud)
path
上面的字符串在哪里,与路径的一部分不存在的消息崩溃,这意味着C#没有根据需要创建它们.
我希望C#处理所有杂乱的目录创建并检查我,而不是我必须解析路径并创建所有必要的目录.这可能吗?否则,是否有一段代码我可以复制到我的项目中,它将处理我可能忽略的任何事情(因为我对文件管理不太了解).
Eri*_* J. 109
System.IO.Directory.CreateDirectory()将创建指定路径中的所有目录和子目录(如果它们尚不存在).
您可以调用它,传递路径,以确保在写入文件之前创建文件夹结构.
虽然System.IO.Directory.CreateDirectory()确实会递归地为你创建目录,但我遇到了一种情况,我不得不想出自己的方法.基本上,System.IO不支持超过260个字符的路径,这迫使我使用Delimon.Win32.IO库,它使用长路径,但不会递归创建目录.
这是我用于递归创建目录的代码:
void CreateDirectoryRecursively(string path)
{
string[] pathParts = path.Split('\\');
for (int i = 0; i < pathParts.Length; i++)
{
if (i > 0)
pathParts[i] = Path.Combine(pathParts[i - 1], pathParts[i]);
if (!Directory.Exists(pathParts[i]))
Directory.CreateDirectory(pathParts[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
这是我通常的做法
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
Run Code Online (Sandbox Code Playgroud)
^ 这应该确保在您的文件之前创建所有必需的文件夹(无论其中一些文件夹是否已经存在)。例如,如果你传递它“c:/a/b/c/data/my file.txt”,它应该确保“c:/a/b/c/data”路径被创建。