gpt4 book ai didi

c# - 本地文件存储自动删除内容

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:30 26 4
gpt4 key购买 nike

    public static async Task SaveFileAsync(string FileName, T data)
{
MemoryStream memStream = new MemoryStream();
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(memStream, data);

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(FileName,
CreationCollisionOption.ReplaceExisting);
using (Stream stream = await file.OpenStreamForWriteAsync())
{
memStream.Seek(0, SeekOrigin.Begin);
await memStream.CopyToAsync(stream);
await stream.FlushAsync();
}
}

public static async Task<T> RestoreFileAsync(string FileName)
{
T result = default(T);
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(FileName);
using (IInputStream inStream = await file.OpenSequentialReadAsync())
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
result = (T)serializer.ReadObject(inStream.AsStreamForRead());
return result;
}
}

catch (FileNotFoundException)
{
return default(T);
}
}

我正在使用这段代码来保存和检索我的数据,它工作正常。

将我的数据保存到这个本地文件并启动我的应用程序后,有时没有数据。

我将我的数据保存为 .xml 文件。

我每次保存时都会检查文件,它包含已保存的内容。但有时它会删除它,我不知道为什么。

我尝试了 DataContractJsonSerializer,但仍然有同样的问题。

最佳答案

正如 Jerry 所指出的,这可能是一个锁定问题。它也可能是竞争条件(我们看不到您调用这些方法的代码,因此请确保在另一个已经运行时无法调用另一个)。

我看到的一个潜在区域是这两行:

storageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(FileName,
CreationCollisionOption.ReplaceExisting);
using (Stream stream = await file.OpenStreamForWriteAsync())

在此代码中,您需要在一个步骤中创建文件(必要时覆盖),然后在另一步骤中打开文件。您正在等待,所以我在这里没有发现任何问题,但是如果您最终得到一个空文件,则这两行之间可能会出现故障,这是有道理的。事实证明,存在 OpenStreamForWriteAsync 的重载,允许您在文件不存在时创建文件或在文件存在时覆盖它。您可以将这两个步骤合二为一。

http://msdn.microsoft.com/en-us/library/hh582148.aspx

最后(我认为这与您的问题没有任何关系)您可以完全跳过内存流。 DataContractSerializer 可以直接写入 FileStream 就好了。不妨为自己节省几行代码和内存占用量。

希望对您有所帮助。如果您弄明白了,请告诉我们。

开发支持、设计支持和更多令人敬畏的好处:http://bit.ly/winappsupport

关于c# - 本地文件存储自动删除内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14910896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com