C#:在你的DirectoryInfo的目录创建一个新的FileInfo(C#: Creating

2019-07-29 14:38发布

我只是想知道,当你有一个例子:

var dir = new DirectoryInfo(@"C:\Temp");

是否有一个新的文件添加到该目录比这更简单的/更清晰的方式吗?

var file = new FileInfo(Path.Combine(dir.FullName, "file.ext"));

我想我可能只需要做出一个扩展方法或东西,但好奇,如果东西已经存在无法看到这里...我的意思是DirectoryInfo确实有GetFiles()的实例方法。

Answer 1:

它是什么,你想做什么? 标题写着“创建一个新的文件”。 甲FileInfo对象是不是一个文件; 它是关于一个文件(可能或可能不存在)的物体保持信息。 如果你真的要创建的文件,也有一些这样的方式。 其中一个最简单的方法是这样的:

File.WriteAllText(Path.Combine(dir.FullName, "file.ext"), "some text");

如果你想创建基于该文件FileInfo对象,而不是,你可以用下面的办法:

var dir = new DirectoryInfo(@"C:\Temp");
var file = new FileInfo(Path.Combine(dir.FullName, "file.ext"));
if (!file.Exists) // you may not want to overwrite existing files
{
    using (Stream stream = file.OpenWrite())
    using (StreamWriter writer = new StreamWriter(stream))
    {
        writer.Write("some text");
    }
}

作为一个方面说明:这是dir.FullName ,不dir.FullPath



Answer 2:

你为什么不使用:

File.Create(@"C:\Temp\file.ext");

要么

var dir = new DirectoryInfo(@"C:\Temp");
File.Create(dir.FullName + "\\file.ext");


Answer 3:

虽然确实存在Directorynfo.GetFiles()方法,他们只返回实际存在磁盘上的文件。 Path.Combine约为假设路径。

试试这些扩展方法:

    public static FileInfo CombineWithFileName(this DirectoryInfo directoryInfo, string fileName)
    {
        return new FileInfo(Path.Combine(directoryInfo.Name, fileName));
    }

    public static DirectoryInfo CombineWithDirectoryName(this DirectoryInfo directoryInfo, string directoryName)
    {
        return new DirectoryInfo(Path.Combine(directoryInfo.Name, directoryName));
    }


文章来源: C#: Creating a new FileInfo in a directory that you have the DirectoryInfo of