Каков рекомендуемый способ скопировать файл в папку tmp? - PullRequest
2 голосов
/ 26 октября 2011

Мне нужно скопировать файл в папку tmp, чтобы манипулировать им.Мне нужно убедиться, что я всегда могу скопировать файл.

  • Правильн ли следующий код?
  • Гарантирует ли он, что никогда не пытается скопировать в уже существующее местоположение?
  • Есть ли вероятность сбоя?(Должен ли я поймать какие-либо исключения)

Я использую следующий код:

string tmpFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 26 октября 2011

Возможно использовать Path.GetTempFileName вместо?

string tmpFile = Path.GetTempFileName();

Этот метод может выдать IOException, так что вы, вероятно, должны поймать это в какой-то момент. Точно, где больше зависит от контекста, в котором существует этот код.

Обратите внимание, что этот метод также создает файл на диске, поэтому нет риска, что какой-то другой процесс создаст файл с одинаковым именем между этим вызовом и временем, когда файл записывается вашим кодом.

2 голосов
/ 26 октября 2011
  • Ваш код работает (хотя он не делает то, что вы хотите, см. Следующий пункт)
  • Нет, GetRandomFileName не проверяет уникальность имени, я бы посоветовал использовать вместо него GetTempFileName ().
  • Вам не нужно проверять здесь, но при начале использования файла (записи в него) могут возникать ошибки (например, полный диск).Если вы используете GetTempFileName (), вам нужно начинать проверку на наличие ошибок, поскольку она возвращает ошибку, когда не удается создать файл или нет доступного уникального имени.
1 голос
/ 26 октября 2011

Что не так с:

string tmpFile = Path.GetTempFileName();

Из MSDN на Path.GetTempFileName () :

Создает временный файл с уникальным именем и нулевым байтомна диске и возвращает полный путь к этому файлу.Файл имеет расширение .TMP.

Он гарантирует, что вы не получите файл, который уже существует, а также относительно вашего вопроса о сценариях сбоя, если он не может создать такой файл:

Метод GetTempFileName вызовет IOException, если он используется для создания более 65535 файлов без удаления предыдущих временных файлов.

Метод GetTempFileName вызовет IOException, если нет уникального временного имени файладоступен.Чтобы устранить эту ошибку, удалите все ненужные временные файлы.

...