C# 使用System.IO.Compression压缩Windows 10文档文件夹,不包括重新分析点
我正在编写一个简单的桌面应用程序,将文件从一台电脑复制到另一台电脑。Windows 10重分析点有问题,特别是我的音乐。我想我们只需要一行简单的代码:C# 使用System.IO.Compression压缩Windows 10文档文件夹,不包括重新分析点,c#,system.io.compression,C#,System.io.compression,我正在编写一个简单的桌面应用程序,将文件从一台电脑复制到另一台电脑。Windows 10重分析点有问题,特别是我的音乐。我想我们只需要一行简单的代码: ZipFile.CreateFromDirectory(documentsFolder, docSavePath + @"\Documents.zip", CompressionLevel.Optimal, false); 但事实并非如此,它会在“我的音乐”文件夹中崩溃。我也尝试了很多不同的方法,都有相同的结果——拒绝访问。复制和/或压缩文档文
ZipFile.CreateFromDirectory(documentsFolder, docSavePath + @"\Documents.zip", CompressionLevel.Optimal, false);
但事实并非如此,它会在“我的音乐”文件夹中崩溃。我也尝试了很多不同的方法,都有相同的结果——拒绝访问。复制和/或压缩文档文件夹真的会这么难吗?我怀疑,我只是错过了一些东西。我尝试提升特权,但也没有成功。任何人都有这样做的例子吗?我能够找到如何检查repassepoint属性,这相对简单,但随后必须拼凑出如何循环所有文件并将它们添加到ZipArchive。递归目录的功劳归于 然后我加入了我所了解的关于重分析文件属性的内容
private void documentBackup(string docSavePath)
{
if (File.Exists(docSavePath + @"\Documents.zip")) File.Delete(docSavePath + @"\Documents.zip");
using (ZipArchive docZip = ZipFile.Open(docSavePath + "\\Documents.zip", ZipArchiveMode.Create))
{
foreach (FileInfo goodFile in RecurseDirectory(documentsFolder))
{
var destination = Path.Combine(goodFile.DirectoryName, goodFile.Name).Substring(documentsFolder.ToString().Length + 1);
docZip.CreateEntryFromFile(Path.Combine(goodFile.Directory.ToString(), goodFile.Name), destination);
}
}
}
public IEnumerable<FileInfo> RecurseDirectory(string path, List<FileInfo> currentData = null)
{
if (currentData == null)
currentData = new List<FileInfo>();
var directory = new DirectoryInfo(path);
foreach (var file in directory.GetFiles())
currentData.Add(file);
foreach (var d in directory.GetDirectories())
{
if ((d.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
{
continue;
}
else
{
RecurseDirectory(d.FullName, currentData);
}
}
return currentData;
}
private void documentBackup(字符串docSavePath)
{
如果(File.Exists(docSavePath+@“\Documents.zip”))File.Delete(docSavePath+@“\Documents.zip”);
使用(ZipArchive docZip=ZipFile.Open(docSavePath+“\\Documents.zip”,ZipArchiveMode.Create))
{
foreach(递归目录中的FileInfo goodFile(documentsFolder))
{
var destination=Path.Combine(goodFile.DirectoryName,goodFile.Name).Substring(documentsFolder.ToString().Length+1);
docZip.CreateEntryFromFile(Path.Combine(goodFile.Directory.ToString(),goodFile.Name),目标);
}
}
}
公共IEnumerable RecurseDirectory(字符串路径,列表currentData=null)
{
如果(currentData==null)
currentData=新列表();
var directory=newdirectoryinfo(路径);
foreach(目录.GetFiles()中的var文件)
currentData.Add(文件);
foreach(directory.GetDirectories()中的变量d)
{
if((d.Attributes&FileAttributes.repassepoint)=FileAttributes.repassepoint)
{
继续;
}
其他的
{
递归目录(d.FullName,currentData);
}
}
返回当前数据;
}
这比我想跑的时间要长,但在看了这该死的问题几天后,我很高兴它能工作 我能够找到如何检查ReparsePoint属性,这相对简单,但随后必须拼凑出如何循环遍历所有文件并将它们添加到ZipArchive中。递归目录的功劳归于 然后我加入了我所了解的关于重分析文件属性的内容
private void documentBackup(string docSavePath)
{
if (File.Exists(docSavePath + @"\Documents.zip")) File.Delete(docSavePath + @"\Documents.zip");
using (ZipArchive docZip = ZipFile.Open(docSavePath + "\\Documents.zip", ZipArchiveMode.Create))
{
foreach (FileInfo goodFile in RecurseDirectory(documentsFolder))
{
var destination = Path.Combine(goodFile.DirectoryName, goodFile.Name).Substring(documentsFolder.ToString().Length + 1);
docZip.CreateEntryFromFile(Path.Combine(goodFile.Directory.ToString(), goodFile.Name), destination);
}
}
}
public IEnumerable<FileInfo> RecurseDirectory(string path, List<FileInfo> currentData = null)
{
if (currentData == null)
currentData = new List<FileInfo>();
var directory = new DirectoryInfo(path);
foreach (var file in directory.GetFiles())
currentData.Add(file);
foreach (var d in directory.GetDirectories())
{
if ((d.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
{
continue;
}
else
{
RecurseDirectory(d.FullName, currentData);
}
}
return currentData;
}
private void documentBackup(字符串docSavePath)
{
如果(File.Exists(docSavePath+@“\Documents.zip”))File.Delete(docSavePath+@“\Documents.zip”);
使用(ZipArchive docZip=ZipFile.Open(docSavePath+“\\Documents.zip”,ZipArchiveMode.Create))
{
foreach(递归目录中的FileInfo goodFile(documentsFolder))
{
var destination=Path.Combine(goodFile.DirectoryName,goodFile.Name).Substring(documentsFolder.ToString().Length+1);
docZip.CreateEntryFromFile(Path.Combine(goodFile.Directory.ToString(),goodFile.Name),目标);
}
}
}
公共IEnumerable RecurseDirectory(字符串路径,列表currentData=null)
{
如果(currentData==null)
currentData=新列表();
var directory=newdirectoryinfo(路径);
foreach(目录.GetFiles()中的var文件)
currentData.Add(文件);
foreach(directory.GetDirectories()中的变量d)
{
if((d.Attributes&FileAttributes.repassepoint)=FileAttributes.repassepoint)
{
继续;
}
其他的
{
递归目录(d.FullName,currentData);
}
}
返回当前数据;
}
这比我想跑的时间要长,但在看了这该死的问题几天后,我很高兴它能工作 试图将文件保存到usb驱动器的文档保存路径在哪里。或者用户选择的任何位置。文档保存路径试图将文件保存到哪里?到usb驱动器。或者用户选择的任何位置。