拥有一个StorageFolder对象并尝试创建一个名称在其中包含冒号(不在开头或结尾)的文件夹,导致HRESULT 80004005(HRESULT E_FAIL)出现COM错误。
实施例: 等待ApplicationData.Current.TemporaryFolder.CreateFolderAsync(“abc:xyz”, CreationCollisionOption.OpenIfExists);
如果冒号位于最后的开头,我会得到一个HRESULT 8007007b,其中包含“文件名,目录名或卷标语法不正确”的消息。没关系。
我检查了其他无效字符,但只有一个冒号导致E_FAIL。
如果用户输入文件夹名称,则可能会出现问题。解决方法当然只是检查文件名中的冒号。
是否有人知道E_FAIL错误的可能原因?我假设COM认为foldername以URI开头,但当然不能弄清楚它是什么类型的URI。
答案 0 :(得分:4)
好吧,COM的臭名昭着的错误报告又复仇了。我们已经被多年来.NET的优秀和信息丰富的例外所破坏,但是这个地毯被WinRT所取代。 COM是底层互操作机制,HRESULT是报告错误的方式。
E_FAIL是规范错误代码,唯一可以获得的描述性文本是“未指定的错误”。这是准确的,处理该代码的Microsoft程序员不能或不想产生更具描述性的错误。 E_UNEXPECTED是另一个很好的理论,它转化为“灾难性的失败”。 “灾难性”一词实际上指的是错误信息的价值,如果你得到它的话。
在某种程度上推测,“abc:xyz”路径字符串实际上是有效的。它指的是名为“xyz”的备用数据流,存储在文件“abc”中。因此,首先检查路径字符串不会引起恶臭。但是,您正在使用该名称创建文件夹,而不是文件。文件夹不能具有备用数据流。显然,这是发现得很晚,为时已晚,仍然无法生成更准确的错误代码。它应该产生了一个Windows错误,并且它们在HRESULT中被适当地包装,或者用0x8007000进行包装,但是由于不正当的原因而没有这样做。
无法发送有关此内容的反馈,Windows组没有相应的DevDiv的connect.microsoft.com。好的,你知道导致错误的原因。