C# Best Practices: Написание "временных" файлов для скачивания: Поместите их в папку среды приложения или временную папку
По сути, мне интересно, есть ли лучшая практика, когда речь идет о следующей проблеме загрузки файлов, не только для временного использования, но и в конечном итоге для перемещения их в папку приложения. Я столкнулся с некоторыми вариантами:
//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 ответа
Ваш первый вариант очень хорош. Это довольно ясно и хорошо задокументировано, что здесь происходит.
//Option 1 - Random file
String tempfile = Path.GetTempFileName();
WriteData(tempfile);
File.Move(tempfile, Path.Combine(Environment.CurrentDirectory, filename);
За исключением Environment.CurrentDirectory
немного. Как указывает Астандер в этом ответе, вы, вероятно, захотите использовать AppDomain.BaseDirectory, поскольку диалоги могут изменить Environment.CurrentDirectory.
// Вариант 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, которые могут другие
Это winforms? Веб? WPF? что? Почему бы просто не сохранить его в профиле пользователя приложения?