在C#中的File.Copy之后无法删除临时文件

时间:2013-05-06 08:32:10

标签: c# .net file-access

将文件复制到临时目录后,由于UnauthorizedAccessException异常,我无法删除该副本。这里的想法是获取文件的副本,压缩它然后删除副本,但在删除File.CopyFile.Delete之间的所有代码后,我仍然得到例外。退出程序会释放锁定,并允许我毫无问题地删除副本。

有没有办法复制而不会导致这种持久锁定(并保留像LastModified这样的文件元数据)?还是一种释放锁的方法?在File.Copy完成后,是否应该锁定复制的文件?

我正在使用面向.NET Framework 4.0的Visual C#2010 SP1。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Xml;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            String FileName = "C:\\test.txt";
            // Generate temporary directory name
            String directory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            // Temporary file path
            String tempfile = Path.Combine(directory, Path.GetFileName(FileName));
            // Create directory in file system
            Directory.CreateDirectory(directory);
            // Copy input file to the temporary directory
            File.Copy(FileName, tempfile);
            // Delete file in temporary directory
            File.Delete(tempfile);
        }
    }
}

2 个答案:

答案 0 :(得分:6)

检查您的"C:\\test.txt"文件是否为只读。

根据您的评论,这可能是您可以复制但无法删除的原因

尝试使用以下

File.SetAttributes(tempfile, FileAttributes.Normal);
File.Delete(tempfile);

答案 1 :(得分:0)

我看到你已经找到了答案,但无论如何我会加上这个作为参考;可能的替代方法可能是在内存流中创建副本,而不是将文件复制到硬盘驱动器。

使用DotNetZip library,您可以执行以下操作:

using (var ms = new MemoryStream())
{
    using (var zip = new ZipFile())
    {
        zip.AddEntry(fileName, data);
        zip.Save(ms);
    }
}