PathIO.WriteBytesAsync是否也应该创建文件?

时间:2014-06-30 08:53:44

标签: c# windows-runtime storage

我可以发誓我的代码上周正在运行,创建不存在的文件并覆盖现有文件。今天我一直有例外。 FileNotFoundExceptions。

是否允许PathIO创建文件?如果没有,有没有办法只从字符串路径创建文件?

路径有效,可访问,我可以从我的应用程序写入,但我无法创建该文件。路径是通过Path.Combine和ApplicationData.Current.LocalFolder创建的。如果我手动创建它,我可以使用PathIO.ReadXXX。

我希望不要在路径树上循环并检查每个SrorageFolder以及所有这些。

修改

当前代码(我只想在这种情况下创建一个空文件):

string root = ApplicationData.Current.TemporaryFolder.Path;
string path = Path.Combine(root, "test", "test.txt");
PathIO.WriteBytesAsync(path, new byte[0]).AsTask().Wait();

如果我在该特定位置创建文件,我可以使用PathIO.WriteBytesAsync写入该文件。即:如果我通过Windows资源管理器创建文件,则此代码有效。

1 个答案:

答案 0 :(得分:0)

所有PathIO方法都依赖于已存在的文件,包括所有Write *方法。它们被设计为帮助程序,以减轻您必须打开文件流等简单操作。这种行为使它们在概念上与FileIO助手API类似,并使其与依赖于存在的Append *方法的行为保持一致。

要回答您的或然问题 - 是否有一种简单的方法来创建带路径的文件,答案是肯定的。使用静态方法Windows.Storage.StorageFile.CreateFileAsync,通常是采用CreationCollisionOption的版本,您可以在其中指定打开文件(如果文件已存在)而不是覆盖文件。无论哪种方式,您都可以提供带有文件名的相对路径,例如: " TEST1 \ TEST2 \ TEST3 \ MYFILE.DAT"它将自动创建test1,test2和test3子文件夹。

如果您调用CreateFileAsync,当然,您将拥有一个StorageFile,然后您可以将其与FileIO API一起使用。或者您可以忽略StorageFile(它只是路径名的抽象)并使用您的字符串路径,如果这对您的代码更方便。