我有一個奇怪的問題,我想知道是否有其他人遇到過這個。也許我做錯了什麼,有人可以指出我做錯了什麼。C#字符串插值拋出IOException
問題是,我正在創建一個zip文件並向其中添加一堆文件。我正在將壓縮文件創建爲using
,該文件應在完成添加文件後正確關閉該壓縮文件。奇怪的是,當我使用文件路徑的常規字符串時,一切正常。當我使用字符串插值創建路徑而不是常規字符串時,它會拋出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 = [email protected]"{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()
行時取消註釋[email protected]"{destinationDirectory}\{zipFilename}"
行,它會拋出IOException。
有什麼想法,爲什麼它會這樣做?字符串插值以某種方式在文件上持有句柄而不釋放它?
你需要'@'在你的路徑之前。 – i3arnon
對不起。那些在那裏,只是沒有包含在這篇文章中。我已經更新了它。 – smoothgrips
這被編譯爲[完全相同的代碼(http://tryroslyn.azurewebsites.net/#K4Zwlgdg5gBAygTxAFwKYFsDcAoADsAIwBswBjGUogQxBBgGEYBvbGNmfYsmANwHswAExgBZABQBKZq3YoATpFiDUKSFWRg+EACJg5qUsj5yEMALwwAAgCJSALgA6udQAsHRhwC8wuBwDMwIlRrHHYYeUUYb1wAMUDUCCp0VHMYaxA+ZLigxOSAOmiQmTYI6BgAnKSUi1KoPJjjdHUxGyYABgBfByYARg7rABoYZVVEjS1dfUNjBCHo7ISqiVDZZAUyisXkgCZUgBJWkY0xzR09AyMTLqZ5+NzUfpW2DuwOoAA==)。你確定這是什麼? – i3arnon