gpt4 book ai didi

c# - 一个进程无法访问文件,因为它正被另一个进程使用

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:18 25 4
gpt4 key购买 nike

我知道这个问题有多种变体,但在审查它们时我没有看到我的确切用例,而且我的结果有问题。

我正在做的是将一些 BZ2 压缩文件通过 FTP 传输到我硬盘驱动器的一个文件夹中。然后我解压缩每一个以供审查。最后,我想通过电子邮件将文件发送给某人,但我想先将它们放入 Zip 存档中以使其更容易。下面是代码。

private void buttonCreateZip_Click(object sender, EventArgs e)
{
Directory.CreateDirectory(@"C:\temp\logfiles\" + comboBoxDirectory.SelectedItem.ToString() + "\\zip\\");

string startPath = @"C:\temp\logfiles\" + comboBoxDirectory.SelectedItem.ToString();

string zipPath = @"C:\temp\logfiles\" + comboBoxDirectory.SelectedItem.ToString() + "\\zip\\" + comboBoxDirectory.SelectedItem.ToString() + ".zip";

File.SetAttributes(@"C:\temp\logfiles\" + comboBoxDirectory.SelectedItem.ToString() + "\\zip\\", FileAttributes.Normal);
File.SetAttributes(@"C:\temp\logfiles\" + comboBoxDirectory.SelectedItem.ToString() + "\\", FileAttributes.Normal);

ZipFile.CreateFromDirectory(startPath, zipPath);
}

我并没有单独组合文件,而是使用一个 API 获取目标目录中的所有文件并将它们压缩到存档中。

皱纹是即使我得到异常

Process cannot access the file "C:..." because it is being used by another process"

无论如何,它都会在我为此创建的 zip 子目录中创建 ZIP 存档。它几乎看起来像是在库函数 CreateFromDirectory 中,但这是我通过引用访问的标准库的一部分:

System.IO.Compression.FileSystem.

最佳答案

压缩文件的目标目录:
@"C:\temp\logfiles\[Some Name]\Zip"

包含在源目录的路径中,压缩操作的基础目录:
@"C:\temp\logfiles\[Some Name]

ZipFile.CreateFromDirectory包括基本目录的子目录树结构及其在创建压缩文件时的内容,因此它也尝试压缩它正在创建的目标文件。当然它不能访问它,因为它(猜猜看)正在使用中。

如果您将目标目录移到基本路径之外,它不会引发任何异常。

您可以使用用户 Temp 目录作为压缩文件的临时目标,然后在压缩文件完成后将其移动到目标目录。

用户临时目录由 Environment.GetEnvironmentVariable() 返回:

Environment.GetEnvironmentVariable("Temp", EnvironmentVariableTarget.User);

您还需要删除临时 zip 文件,并且在任何情况下,确认它不存在(具有该名称的文件可能出于任何原因存在并且尝试覆盖它会导致错误)。< br/>

使用用户临时目录创建 ZipFile 的可能方法示例:

string SourceFolder = @"C:\temp\logfiles\";
string DestinationFolder = @"C:\temp\logfiles\Zip";
string ZippedFileName = "ZippedFile.zip";

string UserTempFolder = Environment.GetEnvironmentVariable("Temp", EnvironmentVariableTarget.User);
string ZippedTempFile = Path.Combine(UserTempFolder, ZippedFileName);
if (File.Exists(ZippedTempFile)) { File.Delete(ZippedTempFile); }

ZipFile.CreateFromDirectory(SourceFolder, ZippedTempFile);

Directory.CreateDirectory(DestinationFolder);

File.Move(ZippedTempFile, Path.Combine(DestinationFolder, ZippedFileName));

关于c# - 一个进程无法访问文件,因为它正被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53216406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com