我需要创建一些位图,并保存他们的文件系统。由于某些原因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();

在开始应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top