C # Best Practices: Написание «временных» файлов для скачивания: Поместите их в папку среды приложения или временную папку - PullRequest
4 голосов
/ 18 января 2011

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

//Option 1 - Random file
String tempfile = Path.GetTempFileName();
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);

//Option 2 - Temp Path + Random file name
String tempfile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);

//Option 3 - Temp Path + real file name
String tempfile = Path.Combine(Path.GetTempPath(), filename);
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);

//Option 4 - Temp Application Path + Random file name
String tempfile = Path.Combine(Environment.CurrentDirectory, Settings.Default.DownloadFolder, Path.GetRandomFileName());
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);

//Optioin 5 - Temp Application Path + file name
String tempfile = Path.Combine(Environment.CurrentDirectory, Settings.Default.DownloadFolder, filename);
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);

Поскольку некоторые файлы используются в то время, у меня нет возможности записать файл туда, куда он в конечном итоге уходит. Он должен идти во временную зону ...

Ответы [ 3 ]

8 голосов
/ 18 января 2011

Ваш первый вариант очень хорош.Это довольно ясно и хорошо задокументировано, что здесь происходит.

//Option 1 - Random file
String tempfile = Path.GetTempFileName();
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);

За исключением бита Environment.CurrentDirectory.Как указывает Astander в этом ответе , вы, вероятно, захотите использовать AppDomain.BaseDirectory, поскольку диалоги могут изменить Environment.CurrentDirectory

1 голос
/ 18 января 2011

// Вариант 4 - Temp Application Path + Случайное имя файла

String tempfile = Path.Combine(Environment.CurrentDirectory, Settings.Default.DownloadFolder, Path.GetRandomFileName());
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);

Это лучший выбор, потому что он не вызовет исключений SecurityExceptions или IOException, которые другие могут

0 голосов
/ 18 января 2011

Это винформ? Веб? WPF? что? Почему бы просто не сохранить его в профиле пользователя приложения?

...