保存后,GetFileAsync不会返回文件

时间:2014-12-24 04:35:13

标签: c# windows-phone-8.1 windows-8.1 storagefile

我有以下方法,它将文件保存到Windows Phone上的LocalFolder

public async Task<bool> SaveValueByKey(string filename, KeyValuePair<string, string> dataToSave)
{
    var appData = ApplicationData.Current;

    // Good Save documentation - http://chriskoenig.net/2012/09/07/windows-8-games-and-roaming-data/
    StorageFile file = await appData.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists);

    try
    {
        // Delete the key if it already exists, then replace.
        IEnumerable<string> content = await this.LoadFileContents(filename);
        if (content.Any(l => l.StartsWith(string.Format("{0}==", dataToSave.Key))))
        {
            await this.DeleteKey(filename, dataToSave.Key);
        }

        await FileIO.WriteTextAsync(file, string.Format("{0}=={1}", dataToSave.Key, dataToSave.Value));
    }
    catch (Exception)
    {
        return false;
    }

    return true;
}

然后我尝试使用此方法重新加载数据。

public async Task<string> LoadValueFromKey(string filename, string key)
{
    var appData = ApplicationData.Current;
    StorageFile file = null;

    try
    {
        file = await appData.LocalFolder.GetFileAsync(filename);
    }
    catch (FileNotFoundException)
    {
        return string.Empty;
    }
    catch (Exception)
    {
        return string.Empty;
    }

    IEnumerable<string> contents = await this.LoadFileContents(filename);
    string element = string.Format("{0}==", key);
    if (!contents.Any(line => line.StartsWith(element)))
    {
        return string.Empty;
    }

    return contents.First(line => line.StartsWith(element))
        .ToString()
        .Substring(element.Length);
}

GetFileAsync的调用返回null,即使CreateFileAsync调用后有效的文件对象返回给我。

我在这里遗漏了什么吗?我需要做出声明吗?我没有看到与此有关的任何内容。

修改

文件名和键值从存储库传入,存储库声明如下:

private const string tokenFilename = "UserSession.dat";

private const string tokenKey = "UserToken";

修改2

抛出的异常是FileNotFound异常,带有以下消息。

The system cannot find the file specified. (Exception from HRESULT: 0x80070002)

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Lifestream.App.Mobile.WindowsApp.Services.FileStorageService.<LoadValueFromKey>d__16.MoveNext()

编辑3

如果我将应用程序作为Windows应用程序运行(这是一款通用应用程序),则会保存并加载该文件而不会出现任何问题。如果我定位Windows Phone,则在尝试保存然后加载时会抛出File Not Found异常。这似乎是手机特有的,我无法理解为什么

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题。问题出在Windows Phone项目属性上。 Properties-&gt; Debug选中了“卸载然后重新安装我的软件包”选项,这样就删除了每次重新运行应用程序时创建的所有已保存文件。