如何在一个方法调用中创建文件及其父目录?

时间:2012-06-06 05:47:07

标签: c# file-io refactoring

我想创建一个特定目录中的文件。 例如:C:\ x \ y \ z \ a.txt

对于此操作,我必须创建目录以创建文件。

Directory.Createdirectory("C:\x\y\z\");
File.Create("C:\x\y\z\a.txt");

但我真的很想知道我可以在单行代码中执行此操作。

任何帮助和想法都会受到高度赞赏。

6 个答案:

答案 0 :(得分:2)

简单:添加功能

void MySingleLineOfCodeFunction(string path, string filename)
{
    Directory.Createdirectory(path);
    File.Create(filename);
}

然后使用一行代码:

MySingleLineOfCodeFunction(@"C:\x\y\z\", "a.txt");

我想说的是代码之间没有区别。 其中一些是由微软人员编写的,而其他人则由普通人编写。但是电脑没有什么区别。 :)

答案 1 :(得分:2)

不幸的是,没有一行代码可以做你想要的。

为什么呢?因为即使我们通过一些Microsoft内置函数这样做,内部也会调用两种方法。一个用于目录创建,另一个用于文件创建。

然而,你可以通过将它们变成一个方法来减少你的代码行,并像Petar Ivanov所说的那样在一行中调用它们

您可以创建静态扩展方法。这样您就可以在其他地方使用它而无需创建实例。 (减少创建实例的一行)。

答案 2 :(得分:2)

据我所知,没有File创建方法可以在.NET框架中同时创建目录。

如果代码中重复了“目录检查/创建,然后创建文件”模式,则必须在方法中实现它。

答案 3 :(得分:1)

要创建文件,不,该目录必须存在。即使使用Visual Basic的文件友好类,您仍然必须首先创建目录。有趣的是移动会创建文件夹。

来自CreateFile http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

  

<强>目录

     

应用程序无法使用创建目录   CreateFile,因此只有OPEN_EXISTING值有效   此用例的dwCreationDisposition。要创建目录,请执行   应用程序必须调用CreateDirectory或CreateDirectoryEx

答案 4 :(得分:0)

我已经修改了@Petar_Ivanov的答案,根据文件路径计算父目录,认为它可能对其他可能需要类似功能的人有用。

    public void CreateFile(string filePath)
    {
        if (!File.Exists(filePath))
        {
            var parent = Directory.GetParent(filePath);
            Directory.CreateDirectory(parent.FullName);
            File.Create(filePath);
        }
    }

这种方法的主要警告是: File.Create返回一个文件流,因此您需要记住将其关闭。

答案 5 :(得分:0)

主要在我的代码块中; 我在文件创建部件之前处理文件夹存在。

public void CheckCreatePath(fileName)
{
    string filePath = Directory.GetParent(fileName).ToString();
    if (!Directory.Exists(filePath))
        Directory.CreateDirectory(filePath);
}

然后使用

CheckCreatePath("C:\\TEMP\\TESTPath\\myFile.txt");

在您的代码块中。