С#: Создание новой 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));
}