如何断开与本地JSON文件的连接?

How Could Disconnect From Local JSON File?

提问人:Vahid Bahrami 提问时间:11/14/2023 最后编辑:dbcVahid Bahrami 更新时间:11/14/2023 访问量:37

问:

我需要每 10 分钟下载一个 JSON 文件到我的项目中。(旧文件删除和新文件替换) 在删除和替换上一个进程之间,使用 Newtonsoft.json 库从数据中读取数据,到目前为止一切顺利。

现在我的问题:从JSON文件中读取数据后,删除旧数据取消并说其他程序使用的文件,并且无法替换新的JSON文件

Dim Sreader As StreamReader = File.OpenText("C:\Common\Current.json")
Dim Reader As JsonTextReader = New JsonTextReader(Sreader)
Dim Treader As JObject = CType(JToken.ReadFrom(Reader), JObject)


S1 = Treader.SelectToken("current.temp_c").ToString()
vb.net json.net

评论

0赞 dbc 11/14/2023
使用 Using 打开 and ,当语句的主体终止时,它将被关闭。请参阅汉斯·帕桑特(Hans Passant)的回答,以 Vb.net 阅读文件后没有关闭文件StreamStreamReaderUsing
0赞 dbc 11/14/2023
除此之外,我很难理解你的问题。您的问题是不知道如何删除文件吗?您不知道如何下载文件?您不知道如何检测文件系统中的文件何时被替换?您不知道如何安排每 10 分钟执行一次的任务?或者是否在某个地方抛出了一些异常,您需要帮助才能解决?
0赞 dbc 11/14/2023
看看如何提问codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question,然后请尝试编辑你的问题,更准确地解释你的问题,并解释你需要什么答案。但是,非常宽泛的问题,例如“如何编写一个应用程序,每 10 分钟下载一次 JSON 文件,将其反序列化为某个内存中的数据模型,然后通知 UI JSON 数据中的更改”,可能会因为过于宽泛而被关闭,因此请尝试将您的问题分解为离散的、可回答的部分。祝你好运!
0赞 SSS 11/14/2023
我怀疑这个提问者不是以英语为母语的人。我的猜测是,此进程正在锁定删除和替换JSON文件的另一个进程。

答:

1赞 Joel Coehoorn 11/14/2023 #1
Using Sreader As StreamReader = File.OpenText("C:\Common\Current.json")
Using Reader As New JsonTextReader(Sreader)
    Dim Treader As JObject = CType(JToken.ReadFrom(Reader), JObject)
    S1 = Treader.SelectToken("current.temp_c").ToString()
    '...
End Using
End Using
File.Delete("C:\Common\Current.json")

除此之外,作为额外的预防措施,在打开文件之前,很容易重命名文件以包含当前日期和时间。这至少可以防止锁定文件问题阻止其他更新。

Dim filePath As String = "C:\Common\Current.json"
Dim tempPath As String = $"C:\Common\Current-{DateTime.Now:yyyyMMddHHmmss}.json"

File.Move(filePath, tempPath)
Using Sreader As StreamReader = File.OpenText(tempPath)
Using Reader As New JsonTextReader(Sreader)
    Dim Treader As JObject = CType(JToken.ReadFrom(Reader), JObject)
    S1 = Treader.SelectToken("current.temp_c").ToString()
    '...
End Using
End Using
File.Delete(tempPath)