【问题标题】:C#: Creating a new FileInfo in a directory that you have the DirectoryInfo ofC#:在您拥有 DirectoryInfo 的目录中创建一个新的 FileInfo
【发布时间】:2010-11-07 20:46:39
【问题描述】:

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

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

有没有比这更简单/更清晰的方法来向该目录添加新文件?

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

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

【问题讨论】:

  • 您问题中的代码对我来说看起来很合适(标记为 wiki,因为我在这里并没有真正增加价值......)
  • 是的,它缺少一个 (DirectoryInfo, string) 构造函数

标签: c# file directory


【解决方案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

【讨论】:

  • 哦,好电话。 FullPath 是受保护的字段。 FullName 是属性。刚刚扫描 MSDN 会员页面有点太快了 :)
【解决方案2】:

你为什么不使用:

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

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

【讨论】:

  • 因为我有 DirectoryInfo 和文件名。不能同时使用。
【解决方案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));
    }

【讨论】:

  • 我总是对 .NET 框架没有进一步将路径封装在丰富的类型中而感到失望。他们本可以跳过 FileInfoDirectoryInfo,将 Path 设为实例类型,这样我们就会有很多类型安全,而今天我们只有字符串。
猜你喜欢
  • 2023-01-17
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
相关资源
最近更新 更多