Создание пустого файла в C#



каков самый простой / канонический способ создания пустого файла в C# / .NET?



самый простой способ я нашел до сих пор:



System.IO.File.WriteAllLines(filename, new string[0]);
972   7  

7 ответов:

используя File.Create оставит файл открытым, что, вероятно, не то, что вы хотите.

вы могли бы использовать:

using (File.Create(filename)) ;

это выглядит немного странно, заметь. Вместо этого вы можете использовать фигурные скобки:

using (File.Create(filename)) {}

или просто позвоните Dispose напрямую:

File.Create(filename).Dispose();

в любом случае, если вы собираетесь использовать это в более чем одном месте, вы, вероятно, следует оборачивать его в вспомогательный метод, например,

public static void CreateEmptyFile(string filename)
{
    File.Create(filename).Dispose();
}

обратите внимание, что вызов Dispose непосредственно вместо использования using заявление на самом деле не имеет большого значения здесь, насколько я могу сказать - единственный способ это может сделать разницу, если поток был прерван между вызовом File.Create, а вызов Dispose. Если это состояние расы существует, я подозреваю, что это будет и на using версия, если поток был прерван в самом конце File.Create метод, непосредственно перед возвращением значения...

File.WriteAllText("path", String.Empty);

или

File.CreateText("path").Close();
System.IO.File.Create(@"C:\Temp.txt");
using (System.IO.File.Create(@"C:\Temp.txt"));

вы можете связывать методы с возвращаемым объектом, поэтому вы можете сразу закрыть файл, который вы только что открыли в одном операторе.

File.Open("filename", FileMode.Create).Close();

несколько распространенный вариант использования для создания пустого файла заключается в том, чтобы вызвать что-то еще, происходящее в другом процессе, при отсутствии более сложной связи с процессом. В этом случае это может помочь сделать создание файла атомарным с точки зрения внешнего мира (особенно если запускаемая вещь собирается удалить файл, чтобы "потреблять" триггер).

Так что это может помочь создать нежелательное имя (Guid.Метод newguid.ToString()) в том же каталоге, что и файл, который вы хотите создать, а затем сделать файл.Перейти от временной именем по вашему усмотрению. В противном случае срабатывает код, который проверяет наличие файла, а затем удаляет триггер может работать в условиях гонки, где файл удаляется до его полного закрытия.

наличие временного файла в том же каталоге (и файловой системе) дает вам атомарность, которую вы можете захотеть. Это дает что-то вроде.

public void CreateEmptyFile(string path)
{
    string tempFilePath = Path.Combine(Path.GetDirectoryName(path),
        Guid.NewGuid.ToString());
    using (File.Create(tempFilePath)) {}
    File.Move(tempFilePath, path);
}

чтобы избежать случайной перезаписи существующего файла использовать:

using (new FileStream(filename, FileMode.CreateNew)) {}

...и обработайте исключение IOException, которое произойдет, если файл уже существует.

File.Create, который предлагается в других ответах, перезапишет содержимое, если файл уже существует. В простых случаях вы можете смягчить это с помощью File.Exists(). Однако что-то более надежное необходимо в сценариях, где несколько потоков и / или процессов пытаются создать файлы в одной папке одновременно.

путь.GetTempFileName () создаст пустой файл с уникальным именем и вернет к нему путь.

Если вы хотите управлять путем, но получить случайное имя файла, вы можете использовать GetRandomFileName, чтобы просто вернуть строку имени файла и использовать ее с Create

например:

string fileName=Path.GetRandomFileName();
File.Create("custom\path\" + fileName);

Comments

    Ничего не найдено.