C# 如果目录没有';不存在以创建文件吗?
我这里有一段代码,如果目录不存在就会中断:C# 如果目录没有';不存在以创建文件吗?,c#,.net,file-io,C#,.net,File Io,我这里有一段代码,如果目录不存在就会中断: System.IO.File.WriteAllText(filePath, content); 在一行(或几行)中,是否可以检查指向新文件的目录是否不存在,如果不存在,是否可以在创建新文件之前创建它 我正在使用.NET 3.5。您可以使用来检查文件是否存在,并在需要时使用创建它。确保检查您是否有权在该位置创建文件 一旦确定该文件存在,就可以安全地写入该文件。尽管作为预防措施,您应该将代码放入一个try…catch块中,并捕获异常,如果事情不完全按照计
System.IO.File.WriteAllText(filePath, content);
在一行(或几行)中,是否可以检查指向新文件的目录是否不存在,如果不存在,是否可以在创建新文件之前创建它
我正在使用.NET 3.5。您可以使用来检查文件是否存在,并在需要时使用创建它。确保检查您是否有权在该位置创建文件
一旦确定该文件存在,就可以安全地写入该文件。尽管作为预防措施,您应该将代码放入一个try…catch块中,并捕获异常,如果事情不完全按照计划进行,函数可能会引发异常
.以创建
写入文件之前,(新文件信息(文件路径)).Directory.Create()
..或者,如果存在,则创建(否则不执行任何操作)
您可以使用以下代码
DirectoryInfo di = Directory.CreateDirectory(path);
正如@hitec所说,您必须确保您拥有正确的权限,如果您拥有,您可以使用此行来确保目录的存在:
Directory.CreateDirectory(Path.GetDirectoryName(filePath))
var filePath=context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings[“ErrorLogFile]”)代码>
var file=newfileinfo(filePath)代码>
file.Directory.Create()
如果目录已经存在,则此方法不执行任何操作
var sw=newstreamwriter(filePath,true)代码>
sw.WriteLine(在此处输入您的消息)代码>
sw.Close()代码>将文件移动到不存在的目录的一种优雅方法是为本机FileInfo类创建以下扩展名:
public static class FileInfoExtension
{
//second parameter is need to avoid collision with native MoveTo
public static void MoveTo(this FileInfo file, string destination, bool autoCreateDirectory) {
if (autoCreateDirectory)
{
var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination));
if (!destinationDirectory.Exists)
destinationDirectory.Create();
}
file.MoveTo(destination);
}
}
然后使用全新的MoveTo扩展:
using <namespace of FileInfoExtension>;
...
new FileInfo("some path")
.MoveTo("target path",true);
使用;
...
新文件信息(“某些路径”)
.MoveTo(“目标路径”,true);
检查。我最初误读了您的问题,您想写入一个可能不存在的文件。不过,文件和目录IO的概念基本相同。Directory.CreateDirectory
的功能正是您想要的:如果目录还不存在,它会创建目录。无需先执行显式检查。如果path
是文件而不是目录,则引发IOException。可能重复的@TimSchmelter,“可能重复”是一种清理的方式——关闭类似的问题,并保留一个最佳答案。日期不是必需的。看看你是否同意它需要澄清。请投票表决优雅的解决方案,因为它可以处理需要创建嵌套文件夹的情况。谢谢!我看到了,但我想从文件的绝对路径开始,不想处理路径拆分。现在我知道你可以从FileInfo实例访问目录了。有没有异步的方法可以做到这一点?我想你可以用Task.Run(()=>)来实现代码>。
using <namespace of FileInfoExtension>;
...
new FileInfo("some path")
.MoveTo("target path",true);