Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果目录没有';不存在以创建文件吗?_C#_.net_File Io - Fatal编程技术网

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);