Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取文件已存在错误,因为代码正在异步运行_C#_File_Asynchronous - Fatal编程技术网

C# 获取文件已存在错误,因为代码正在异步运行

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

如下所示,代码运行async,2个使用相同名称创建的zip,当尝试复制目标时,出现如下错误:

文件“C:\Temp\test\u 20181024032123496.Zip”已存在

如何跳过此条件?谢谢

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
是的,我也这样做了,非常感谢您的回复。不客气!此外,您可能需要两个检查来确定。