簡體   English   中英

C#字符串插值引發IOException

[英]C# string interpolation throws IOException

我有一個奇怪的問題,想知道以前是否有人遇到過。 也許我做錯了什么,有人可以指出我做錯了什么。

問題是,我正在創建一個zip文件,並將一堆文件添加到其中。 我將zip創建文件包裝在using ,在完成向其中添加文件后,應該會正確關閉zip文件。 奇怪的是,當我使用常規字符串作為文件路徑時,一切正常。 當我使用字符串插值創建路徑而不是常規字符串時,它將引發IOException“該進程無法訪問該文件,因為該文件正在被另一個進程使用”。

這是代碼:

try
{
    string sourceDirectory = @"c:\path\to\files\that\need\zipping";
    string destinationDirectory = @"c:\path\to\zip\file";
    string zipFilename = "someFilename.zip";
    string filename = string.Format(@"{0}\{1}", destinationDirectory, zipFilename);
    //string filename = $@"{destinationDirectory}\{zipFilename}";
    using (ZipArchive zip = ZipFile.Open(filename, ZipArchiveMode.Create))
    {
        foreach (string pathToFile in Directory.GetFiles(sourceDirectory))
        {
            zip.CreateEntryFromFile(pathToFile, Path.GetFileName(pathToFile));
        }
    }
}
catch (IOException ex)
{
    // Lands here when using string interpolation.
}

上面的代碼有效,並且不會引發IOException。 但是,當我注釋掉string.Format()行時,取消注釋$@"{destinationDirectory}\\{zipFilename}"行的注釋時,它將引發IOException。

有什么想法為什么要這么做呢? 字符串插值是否以某種方式握住了文件的句柄而不釋放它?

字符串插值不能拋出IOException 以下行可能引發異常: using (ZipArchive zip = ZipFile.Open(filename, ZipArchiveMode.Create))

確保可以在不同名稱的文件上使用字符串插入和不使用字符串插入來測試程序。

您的代碼是完美的,還有其他原因導致IOException。 在您提到的兩種情況下,我都很難運行您的代碼,它的效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM