将文件复制到临时目录后,由于UnauthorizedAccessException异常,我无法删除该副本。这里的想法是获取文件的副本,压缩它然后删除副本,但在删除File.Copy
和File.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);
}
}
}
答案 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);
}
}