我只是想知道当你有以下情况时:
var dir = new DirectoryInfo(@"C:\Temp");
有没有比这更简单/更清晰的方法将一个新文件添加到该目录中?
var file = new FileInfo(Path.Combine(dir.FullName, "file.ext"));
我想我可能只需要创建一个扩展方法之类的东西,但我很好奇是否已经存在我在这里看不到的东西...我的意思是,例如 DirectoryInfo
已经有了 GetFiles()
方法。
我只是想知道当你有以下情况时:
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));
}
FileInfo
和 DirectoryInfo
,把 Path
设计成实例类型,这样我们就能拥有更多的类型安全性,而今天我们只有字符串。 - Jay Bazuzi
(DirectoryInfo, string)
构造函数。 - Spongman