С#: Создание новой FileInfo в каталоге, в котором у вас есть DirectoryInfo

Мне просто интересно, когда вы, например:

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

Есть ли более простой/ясный способ добавить новый файл в этот каталог?

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

Я думаю, что могу, возможно, просто сделать метод расширения или что-то в этом роде, но любопытно, если что-то уже существует, что не видно здесь... Я имею в виду, что DirectoryInfo имеет метод GetFiles(), например.

Ответы

Ответ 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.

Ответ 2

Почему бы вам не использовать:

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

или

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

Ответ 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));
    }