5

将文件复制到临时目录后,由于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);
        }
    }
}
4

2 回答 2

7

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

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

试试下面

File.SetAttributes(tempfile, FileAttributes.Normal);
File.Delete(tempfile);
于 2013-05-06T08:52:37.983 回答
0

我看到您已经找到了答案,但无论如何我都会添加它以供参考;一种可能的替代方法可能是在内存流中创建副本,而不是将文件复制到硬盘驱动器。

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

using (var ms = new MemoryStream())
{
    using (var zip = new ZipFile())
    {
        zip.AddEntry(fileName, data);
        zip.Save(ms);
    }
}
于 2013-05-06T09:34:05.160 回答