Хранилище для временных файлов
Мне частенько приходится использовать хранилище для временных файлов (например, чтобы сохранить файлы во временную папку и передать на обработку внешней программе, а в конце работы все почистить). Обычно я каждый раз пишу подобную ерунду заново, чтобы не искать того, что было написано в прошлый раз. Искать — это, во-первых долго, во-вторых лень, а в-третьих иногда оказывается, что искомое лежит не на домашнем компе, а на рабочем. Словом, обычно написать заново выходит быстрее
Сегодня я очередной раз написал такой класс-хранилище, и получилось вполне симпатично. Пользоваться им нужно вот так:
using (TempFileManager temp = new TempFileManager()) { using (FileStream fs = File.Create(temp["my-temp-file.txt"])) { // файл my-temp-file.txt создался во временной папке // и будет удален вместе с ней } }
Класс TempFileManager создает временную папку со случайным именем в подпапке системного временного каталога (обычно этот путь хранится в переменной окружения %TEMP% или %TMP% и расположен где-нибудь в C:\WINDOWS\Temp).
TempFileManager реализует интерфейс IDisposable, и в методе Dispose удаляет временные файлы и папку, в которой они хранятся. Временные файлы, кстати, вовсе необязательно должны быть в этой папке: можно добавить в список файлы с указанием полного пути, и они тоже будут чиститься в конце работы.
Файл регистрируется как временный, когда его имя передается в индексатор класса TempFileManager (индексатор — это свойство this[string fileName], возвращает он тоже строку). Индексатор TempFileManager всегда возвращает полный путь к переданному файлу: если имя файла указано без пути, файл считается помещенным во временную папку, иначе остается как есть. Например:
using (TempFileManager t = new TempFileManager()) { string s = t[@"1.txt"]; // s = @"c:\Windows\Temp\...\1.txt" s = t[@"c:\autoexec.bat"]; // s = @"c:\autoexec.bat"; }
Исходный текст можно взять на странице проекта Exepack.NET или здесь: TempFileManager.cs