C#:在您拥有DirectoryInfo的目录中创建新的FileInfo

我只是想知道你什么时候有:

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

是否有更简单/更清晰的方法将新文件添加到该目录?

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

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

你想做什么? 标题写着“创建一个新文件”。 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

你为什么不用:

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

要么

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

虽然存在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)); }