C# 获取文件已存在错误,因为代码正在异步运行
如下所示,代码运行async,2个使用相同名称创建的zip,当尝试复制目标时,出现如下错误: 文件“C:\Temp\test\u 20181024032123496.Zip”已存在 如何跳过此条件?谢谢C# 获取文件已存在错误,因为代码正在异步运行,c#,file,asynchronous,C#,File,Asynchronous,如下所示,代码运行async,2个使用相同名称创建的zip,当尝试复制目标时,出现如下错误: 文件“C:\Temp\test\u 20181024032123496.Zip”已存在 如何跳过此条件?谢谢 private static async Task<bool> GenerateZipFile(FileSystemInfo file1, string zipFilePath) { try { using (var zip = ZipFile.Ope
private static async Task<bool> GenerateZipFile(FileSystemInfo file1, string zipFilePath)
{
try
{
using (var zip = ZipFile.Open($"{zipFilePath}\\test_{DateTime.UtcNow:yyyyMMddHHmmssfff}.Zip", ZipArchiveMode.Create))
{
zip.CreateEntryFromFile(file1.FullName, file1.Name, CompressionLevel.Optimal);
}
}
catch (Exception ex)
{
Console.Write(ex);
}
}
private静态异步任务GenerateZipFile(FileSystemInfo file1,字符串zipFilePath)
{
尝试
{
使用(var zip=ZipFile.Open($“{zipFilePath}\\test{DateTime.UtcNow:yyyyMMddHHmmssfff}.zip”,ZipArchiveMode.Create))
{
CreateEntryFromFile(file1.FullName、file1.Name、CompressionLevel.Optimal);
}
}
捕获(例外情况除外)
{
控制台写入(ex);
}
}
好的,所以我不确定您正在创建的zip文件或正在添加到zip文件中的文件是否有问题,所以我添加了检查它们是否存在的代码
private static async Task<bool> GenerateZipFile(FileSystemInfo file1, string zipFilePath)
{
try
{
string newZipFilePath = $"{zipFilePath}\\test_{DateTime.UtcNow:yyyyMMddHHmmssfff}.Zip"
if (!System.IO.File.Exists(newZipFilePath))
{
using (var zip = ZipFile.Open(newZipFilePath, ZipArchiveMode.Create))
{
if(System.IO.File.Exists(file1.FullName))
{
zip.CreateEntryFromFile(file1.FullName, file1.Name, CompressionLevel.Optimal);
}
}
}
}
catch (Exception ex)
{
Console.Write(ex);
}
}
private静态异步任务GenerateZipFile(FileSystemInfo file1,字符串zipFilePath)
{
尝试
{
字符串newZipFilePath=$“{zipFilePath}\\test{DateTime.UtcNow:yyyyMMddHHmmssfff}.Zip”
如果(!System.IO.File.Exists(newZipFilePath))
{
使用(var zip=ZipFile.Open(newZipFilePath,ZipArchiveMode.Create))
{
if(System.IO.File.Exists(file1.FullName))
{
CreateEntryFromFile(file1.FullName、file1.Name、CompressionLevel.Optimal);
}
}
}
}
捕获(例外情况除外)
{
控制台写入(ex);
}
}
这应该行得通,但你也应该检查哪一个是你真正需要的,并且只使用那一个你说的“跳过”是什么意思?跳过它怎么办?是否仍要覆盖该文件?或者干脆不处理该文件?该代码不应该编译,因为
async
方法中没有wait
。话虽如此,如果(!File.Exists(…)存在,您不需要吗?是的,我想跳过对文件的处理此代码没有异步性async
并不能使某些东西异步,它只是一种语法糖,允许使用await
来等待已经异步的操作。只有您知道如何处理现有文件。覆盖它们?提取副本?中止操作?如果您想跳过,只需使用file.exists检查文件是否存在。exists
是的,我也这样做了,非常感谢您的回复。不客气!此外,您可能需要两个检查来确定。