C# 在复制.zip文件之前,请等待其解压缩';节目内容

C# 在复制.zip文件之前,请等待其解压缩';节目内容,c#,zip,unzip,C#,Zip,Unzip,我正在尝试编写一个小型控制台应用程序工具,它可以解压包含多个文件/文件夹/其他归档文件的归档文件,并以另一种方式排列其内容 我使用System.IO.Compression.FileSystem库中的ZipFile.extractodirectory方法解压缩根文件: public static void UnzipPackage(string packagePath, string targetPath) { try { ZipFile.ExtractToDi

我正在尝试编写一个小型控制台应用程序工具,它可以解压包含多个文件/文件夹/其他归档文件的归档文件,并以另一种方式排列其内容

我使用
System.IO.Compression.FileSystem
库中的
ZipFile.extractodirectory
方法解压缩根文件:

public static void UnzipPackage(string packagePath, string targetPath) 
{
    try
    {
        ZipFile.ExtractToDirectory(packagePath, targetLocation);
        Console.WriteLine("Unzipping file {0} complete.", packagePath);
    }
    catch (DirectoryNotFoundException)
    {
        Console.WriteLine("Directory was not found.");
    }
    catch (FileNotFoundException)
    {
        Console.WriteLine("File was not found.");
    }
}
在我的包上运行此方法后,我想将此包中的文件复制到子文件夹中

根据我的说法:

if (!Directory.Exists(targetLocation + @"READY\PHOTO"))
{
    Directory.CreateDirectory(targetLocation + @"\READY\PHOTO");
}
if (Directory.Exists(targetLocation + @"\MAIN\PHOTO"))
{
    string[] files = Directory.GetFiles(targetLocation + @"\MAIN\PHOTO");
    foreach (var file in files)
    {
        string fileName = Path.GetFileName(file);
        string destFile = Path.Combine(targetLocation + @"\MAIN\PHOTO", fileName);
        File.Copy(file, destFile, true);
    }
}
MAIN
READY
都是我的子目录,整个包都在其中(“MAIN”),排序文件也在其中(“READY”)

但是,运行此操作时,zip文件尚未解压缩-出现异常,显示它无法访问指定的文件,即使它从
目录.GetFiles()
中获取了文件名。解压zip文件时创建的文件夹只有在我终止控制台应用程序后才会显示(难怪它无法访问它)


所以最大的问题是——我如何才能等待解压后的文件夹出现?我尝试使用
Thread.Sleep()
,但它无论如何都不会影响流程-仍然会发生异常,只有在我终止应用程序后才会显示文件夹

我假设您收到IOException,类似于“进程无法访问该文件……因为它正被另一个进程使用。”

在我看来,您的复制方法存在问题。看起来您的“发件人”和“收件人”路径基本相同。因此,系统无法覆盖该文件,因为您当前已打开该文件进行读取


只是想澄清一下-这个问题与解压无关!在本例中,您编写的变量
file
destFile
将是相同的-并且它们需要不同。

我假设您得到一个IOException,类似于“进程无法访问该文件…因为它正被另一个进程使用。”

在我看来,您的复制方法存在问题。看起来您的“发件人”和“收件人”路径基本相同。因此,系统无法覆盖该文件,因为您当前已打开该文件进行读取


只是想澄清一下-这个问题与解压无关!在本例中,您编写的变量
file
destFile
将是相同的-并且它们需要不同。

我假设您得到一个IOException,类似于“进程无法访问该文件…因为它正被另一个进程使用。”

在我看来,您的复制方法存在问题。看起来您的“发件人”和“收件人”路径基本相同。因此,系统无法覆盖该文件,因为您当前已打开该文件进行读取


只是想澄清一下-这个问题与解压无关!在本例中,您编写的变量
file
destFile
将是相同的-并且它们需要不同。

我假设您得到一个IOException,类似于“进程无法访问该文件…因为它正被另一个进程使用。”

在我看来,您的复制方法存在问题。看起来您的“发件人”和“收件人”路径基本相同。因此,系统无法覆盖该文件,因为您当前已打开该文件进行读取

只是想澄清一下-这个问题与解压无关!在本例中,您编写的变量
file
destFile
将是相同的-它们需要不同。

您的错误如下:

string destFile = Path.Combine(targetLocation + @"\MAIN\PHOTO", fileName);
应该是:

string destFile = Path.Combine(targetLocation + @"\READY\PHOTO", fileName);
您正试图将文件复制到同一位置。

您的错误如下:

string destFile = Path.Combine(targetLocation + @"\MAIN\PHOTO", fileName);
应该是:

string destFile = Path.Combine(targetLocation + @"\READY\PHOTO", fileName);
您正试图将文件复制到同一位置。

您的错误如下:

string destFile = Path.Combine(targetLocation + @"\MAIN\PHOTO", fileName);
应该是:

string destFile = Path.Combine(targetLocation + @"\READY\PHOTO", fileName);
您正试图将文件复制到同一位置。

您的错误如下:

string destFile = Path.Combine(targetLocation + @"\MAIN\PHOTO", fileName);
应该是:

string destFile = Path.Combine(targetLocation + @"\READY\PHOTO", fileName);

您正在尝试将文件复制到同一位置。

能否显示完整的代码示例,以便我们可以看到这两段代码是如何组合在一起的,而不是看起来不相关?能否显示完整的代码示例,以便我们可以看到这两段代码是如何组合在一起的,你可以展示完整的代码示例,这样我们就可以看到这两段代码是如何组合在一起的。你可以展示完整的代码示例,这样我们就可以看到这两段代码是如何组合在一起的,而不是看起来是未更新的。一个愚蠢的复制粘贴错误让我疯狂了好几个小时。谢谢你帮我发现了这个。哦,天啊。一个愚蠢的复制粘贴错误让我疯狂了好几个小时。谢谢你帮我发现了这个。哦,天啊。一个愚蠢的复制粘贴错误让我疯狂了好几个小时。谢谢你帮我发现了这个。哦,天啊。一个愚蠢的复制粘贴错误让我疯狂了好几个小时。谢谢你帮我发现了这一点。你和马特的答案基本相同,但他比我快了大约15分钟,所以绿色的记号指向他。不过,为了感谢你的贡献,你的答案和马特的答案基本相同,但他比你快了大约15分钟,所以绿色的勾号指向了他。不过,为了感谢你的贡献,你的答案和马特的答案基本相同,但他比你快了大约15分钟,所以绿色的勾号指向了他。不过,为了感谢你的贡献,你的答案和马特的答案基本相同,但他比你快了大约15分钟,所以绿色的勾号指向了他。尽管如此,还是对你的答案投了赞成票,以感谢你的贡献。