我有一个奇怪的问题,我想知道是否有其他人遇到过这个。也许我做错了什么,有人可以指出我做错了什么。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