题
我需要创建一些位图,并保存他们的文件系统。由于某些原因MScharting系统想要它的背景文件供应路径的串的形式。
我是创造动态的背景图像,虽然只有几次。
什么是最好的方式来创建这些文件并随后清理它们?
解决方案
你最好的赌注是有TemporaryFileManager实现IDisposable;你问它为临时文件,它自动产生,坚持在一个临时目录的地方,然后他们都被删除时TemporaryFileManager得到安置,或者通过你或终结(如果已经实施一次性模式正确地)
其他提示
这里就是你如何可以得到完整的路径和文件名临时文件:
string tempFile = System.IO.Path.GetTempFileName();
建立文件使用这种文件和路径,当你完成将它删除。
在我的项目,我有一个帮手类称为临时文件.它有几个静态的方法,我用它来写一流(或数字如果需要的话)对一个临时文件。这里有一个简化例子的这样一种方法:
public static string Write(Stream stream)
{
string FileName = Path.GetTempFileName();
// Write the contents of stream to a file with FileName
return FileName;
}
然后,我有另外一个方法,可接受一个文件路径后,删除该是我的'析'类,尽管你可以把它放在它自己的静态的助手类:
public string ForDeletion(string path)
{
ListOfPaths.Add(path);
return path;
}
最后,我做到以下几点:
SomeApiFunction(ForDeletion(TempFile.Write(myStream)));
这是最好的方式,我将提出用于规避API缺乏流处理能力。
我用这个解决方案:
using System.IO;
using System.Reflection;
namespace Konard.Helpers
{
public static partial class TemporaryFiles
{
private const string UserFilesListFilenamePrefix = ".used-temporary-files.txt";
static private readonly object UsedFilesListLock = new object();
private static string GetUsedFilesListFilename()
{
return Assembly.GetEntryAssembly().Location + UserFilesListFilenamePrefix;
}
private static void AddToUsedFilesList(string filename)
{
lock (UsedFilesListLock)
{
using (var writer = File.AppendText(GetUsedFilesListFilename()))
writer.WriteLine(filename);
}
}
public static string UseNew()
{
var filename = Path.GetTempFileName();
AddToUsedFilesList(filename);
return filename;
}
public static void DeleteAllPreviouslyUsed()
{
lock (UsedFilesListLock)
{
var usedFilesListFilename = GetUsedFilesListFilename();
if (!File.Exists(usedFilesListFilename))
return;
using (var listFile = File.Open(usedFilesListFilename, FileMode.Open))
{
using (var reader = new StreamReader(listFile))
{
string tempFileToDelete;
while ((tempFileToDelete = reader.ReadLine()) != null)
{
if (File.Exists(tempFileToDelete))
File.Delete(tempFileToDelete);
}
}
}
// Clean up
using (File.Open(usedFilesListFilename, FileMode.Truncate)) { }
}
}
}
}
每次你需要的临时文件使用:
var tempFile = TemporaryFiles.UseNew();
可以肯定的所有临时文件被删除的申请后关闭或崩溃把
TemporaryFiles.DeleteAllPreviouslyUsed();
在开始应用程序。
不隶属于 StackOverflow