写入后 StorageFile 仍然锁定

Posted

技术标签:

【中文标题】写入后 StorageFile 仍然锁定【英文标题】:StorageFile still locked after writing 【发布时间】:2022-01-19 09:04:13 【问题描述】:

我有以下代码来编写一个 CSV 文件:

public static async Task WriteCSVFile(StorageFile file, List<string>[] data)

    using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
    
        var outputStream = stream.GetOutputStreamAt(0);
        var dataWriter = new DataWriter(outputStream)
        
            UnicodeEncoding = UnicodeEncoding.Utf8
        ;

        for (int x = 0; x < data[0].Count; x++)
        
            for (int i = 0; i < data.Count(); i++)
            
                dataWriter.WriteString(data[i][x]);
                dataWriter.WriteString(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator);
            
            dataWriter.WriteString(Environment.NewLine);
        

        await dataWriter.StoreAsync();
        await outputStream.FlushAsync();
    

这很好,但是当我尝试在应用程序仍在运行时打开写入的文件时,它被锁定了。

某些东西仍在使用部分之外锁定文件。 你有什么技巧可以解决这个问题吗?

【问题讨论】:

你确定WriteCSVFile()返回的任务已经完成了吗? 正如@MatthewWatson 所说,代码看起来是正确的;所以我唯一能想到的就是任务还没有完成。 这个函数被另一个作为任务运行的函数调用,它被等待并没有错误地完成。我是否必须强制结束此任务才能释放文件? DataWriter 也需要处理。 【参考方案1】:

经过多次变通后,我终于在等待任务后通过调用垃圾收集器来修复它。 StorageFile 似乎没有清理自己。

这是新的召唤:

await SpreadsheetHelper.WriteCSVFile(fileExport, dataExport);
GC.Collect();

感谢您的建议。

【讨论】:

如果您已经解决了您的问题,请mark它被接受 我很乐意这样做,但我显然必须等待 48 小时,因为这是我自己的。 当然。这可以帮助面临同样问题的其他人。

以上是关于写入后 StorageFile 仍然锁定的主要内容,如果未能解决你的问题,请参考以下文章

独占打开文件/锁定文件

移动 StorageFile 后立即在 UWP 中打开 SQLite 连接

为啥hibernate关闭连接后h2的数据库文件仍然会被锁定一段时间?

Chrome 浏览器关闭了360主页防护后每次打开仍然是360导航问题排查与处理方法,不卸载360流氓软件解决chrome浏览器主页锁定问题

Lua getmetatable() 锁定表

如何保存StorageFile以便以后使用?