在using语句中停止调试模式是否会关闭文件流?

时间:2019-03-29 10:10:51

标签: c# .net visual-studio ziparchive

当我写一个zip提取方法时发生的一个想法。

我为OpenRead方法使用了using语句,因此众所周知,一旦语句运行,就应该处理资源。但是,在编写代码时,我正在调试,有几次,我已停止调试以更改using语句中的某些代码。但是,当我停止调试时,using语句尚未完全运行,因此从技术上讲,它没有处置/关闭任何资源。当停止调试时,Visual Studio会自动执行此操作吗?

环顾四周,但找不到任何提示。我正在使用Visual Studio Community 2017(版本15.9.10)和.NET Framework(版本4.7.03056)

        public void Decompress_SaveToFile(string zipFilePath, string directoryPath)
        {
            using (ZipArchive archive = ZipFile.OpenRead(zipFilePath))
            {
                foreach(ZipArchiveEntry entry in archive.Entries)
                {
                    if(File.Exists(directoryPath))
                    {
                        Console.WriteLine("Decompressed file already exists.");
                    }
                    else
                    {
                        entry.ExtractToFile(directoryPath);
                    }
                }
            }
        }

我希望它能关闭所有流/资源,但很好奇。

1 个答案:

答案 0 :(得分:2)

停止调试器时,实际上是在杀死进程。您要求它停止-您不是要它礼貌地放松一切,这可以执行任意数量的代码。

当您在调试器中按下stop时,您唯一的期望就是进程可能退出。没有其他承诺。

这与常规执行相同; usingtry / finallyfinally没有执行的保证;如果有人杀死了该进程:它将不会执行。如果有人拔下电源线:它将无法执行。 finally只会在正常的正常执行路径中执行(无论是成功还是异常)。