g****t 发帖数: 31659 | 1 根据stackoverflow上的讨论,
https://stackoverflow.com/questions/14446447/how-to-read-a-local-text-file?
rq=1
因为比较新的所谓 same-origin-policy,之前的很多自动读本地硬盘文件的办法不能
用了。(例如下面这段代
码,不能用了)
那目前最推荐的办法是什么呢?
function readTextFile(file)
{
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, false);
rawFile.onreadystatechange = function ()
{
if(rawFile.readyState === 4)
{
if(rawFile.status === 200 || rawFile.status == 0)
{
var allText = rawFile.responseText;
alert(allText);
}
}
}
rawFile.send(null);
} |
s*i 发帖数: 5025 | 2 用户选中文件后,上载到某个服务器,然后再AJAX请求回来?
【在 g****t 的大作中提到】 : 根据stackoverflow上的讨论, : https://stackoverflow.com/questions/14446447/how-to-read-a-local-text-file? : rq=1 : 因为比较新的所谓 same-origin-policy,之前的很多自动读本地硬盘文件的办法不能 : 用了。(例如下面这段代 : 码,不能用了) : 那目前最推荐的办法是什么呢? : function readTextFile(file) : { : var rawFile = new XMLHttpRequest();
|
g****t 发帖数: 31659 | 3 这个似乎挺tricky的。用按钮选中文件。每个浏览器都没问题,用ajax或者更老的
技术都可以。
但是下面这种,文件名在变量里就不容易。
var filePath = "file:///C:/your/path/to/file.txt"
readTextFile(filePath);
use case是,我想用另一个程序每秒钟写一次本地的一个data.csv,
javascript每秒钟读一次,在浏览器里面展示一下。还想data.csv这个文件名是可
已根据程序逻辑变化的。
现在看来,还是用一个简单的webserver在本地,当作数据交互的界面,可能比较稳妥。
【在 s*i 的大作中提到】 : 用户选中文件后,上载到某个服务器,然后再AJAX请求回来?
|
s*i 发帖数: 5025 | 4 如果不是给傻瓜用户使用(因为如果建立local server一类的,必然要求在客户端装各
种软件),那么更简洁的办法可以考虑装个ChromePlugin一类的。参考:
https://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-
chrome |
g****t 发帖数: 31659 | 5 disable这个policy是不错的选项。我研究下。
我可以弄个script,自动起来chrome with correct policy。
local server确实比较麻烦。
【在 s*i 的大作中提到】 : 如果不是给傻瓜用户使用(因为如果建立local server一类的,必然要求在客户端装各 : 种软件),那么更简洁的办法可以考虑装个ChromePlugin一类的。参考: : https://stackoverflow.com/questions/3102819/disable-same-origin-policy-in- : chrome
|
d******c 发帖数: 2407 | 6 R shiny实际就是这样,启动一个本地server,可以访问本地文件。
你这个use case是Shiny reactive read的典型例子。
https://shiny.rstudio.com/gallery/reactive-poll-and-file-reader.html |
g****t 发帖数: 31659 | 7 Rstudio 这个用例,有没有处理文件的read-write conflict ?
怎么处理的?
他给的这个例子,一边0.5秒的周期,另一边4秒。似乎有点取巧了。
: R shiny实际就是这样,启动一个本地server,可以访问本地文件。
: 你这个use case是Shiny reactive read的典型例子。
: https://shiny.rstudio.com/gallery/reactive-poll-and-file-reader.
html
【在 d******c 的大作中提到】 : R shiny实际就是这样,启动一个本地server,可以访问本地文件。 : 你这个use case是Shiny reactive read的典型例子。 : https://shiny.rstudio.com/gallery/reactive-poll-and-file-reader.html
|
d******c 发帖数: 2407 | 8 一个只读,一个只写,没有什么conflict的地方吧?最多读的不是最新状态
【在 g****t 的大作中提到】 : Rstudio 这个用例,有没有处理文件的read-write conflict ? : 怎么处理的? : 他给的这个例子,一边0.5秒的周期,另一边4秒。似乎有点取巧了。 : : : R shiny实际就是这样,启动一个本地server,可以访问本地文件。 : : 你这个use case是Shiny reactive read的典型例子。 : : https://shiny.rstudio.com/gallery/reactive-poll-and-file-reader. : html :
|
g****t 发帖数: 31659 | 9 例如一个log行没写完,就读了https://en.m.wikipedia.org/wiki/Read–write_
conflict
: 一个只读,一个只写,没有什么conflict的地方吧?最多读的不是最新状态
【在 d******c 的大作中提到】 : 一个只读,一个只写,没有什么conflict的地方吧?最多读的不是最新状态
|
d******c 发帖数: 2407 | 10 wiki的例子是两个线程都在写。
没写完就读,读的就是没写之前的状态(或者写到一半?这可能依赖于底层细节),但
这不是conflict。
【在 g****t 的大作中提到】 : 例如一个log行没写完,就读了https://en.m.wikipedia.org/wiki/Read–write_ : conflict : : : 一个只读,一个只写,没有什么conflict的地方吧?最多读的不是最新状态 :
|
|
|
g****t 发帖数: 31659 | 11 Rstudio的例子是一個線程?我要的也是兩個線程或者進程。
: wiki的例子是两个线程都在写。
: 没写完就读,读的就是没写之前的状态(或者写到一半?这可能依赖于底层细节
),但
: 这不是conflict。
【在 d******c 的大作中提到】 : wiki的例子是两个线程都在写。 : 没写完就读,读的就是没写之前的状态(或者写到一半?这可能依赖于底层细节),但 : 这不是conflict。
|
d******c 发帖数: 2407 | 12 有一段code在间隔性地写,两段不同的code按不同的间隔,不同的实现方式去读。
写的只有一个,就没有问题。
你之前说的你的用例也只有一个在写啊。要多个写,那除非搞成数据库类似的atom操作
,否则没有办法。
【在 g****t 的大作中提到】 : Rstudio的例子是一個線程?我要的也是兩個線程或者進程。 : : : wiki的例子是两个线程都在写。 : : 没写完就读,读的就是没写之前的状态(或者写到一半?这可能依赖于底层细节 : ),但 : : 这不是conflict。 :
|
g****t 发帖数: 31659 | 13 只有一个exe程序在不停的写文件。另一个exe程序在不停的读。但是一行没写完的时候
,读就发生了。那读出来的内容就
可能不对啊。
现在考虑每行加个checksum字段。
: 有一段code在间隔性地写,两段不同的code按不同的间隔,不同的实现方
式去读。
: 写的只有一个,就没有问题。
: 你之前说的你的用例也只有一个在写啊。要多个写,那除非搞成数据库类
似的
atom操作
: ,否则没有办法。
【在 d******c 的大作中提到】 : 有一段code在间隔性地写,两段不同的code按不同的间隔,不同的实现方式去读。 : 写的只有一个,就没有问题。 : 你之前说的你的用例也只有一个在写啊。要多个写,那除非搞成数据库类似的atom操作 : ,否则没有办法。
|
d******c 发帖数: 2407 | 14 读出来的内容在逻辑上仍然是正确的,不符合你的要求的话,那就只能自己加检查了。
如果是csv的话,丢掉不完整的行吧
【在 g****t 的大作中提到】 : 只有一个exe程序在不停的写文件。另一个exe程序在不停的读。但是一行没写完的时候 : ,读就发生了。那读出来的内容就 : 可能不对啊。 : 现在考虑每行加个checksum字段。 : : : 有一段code在间隔性地写,两段不同的code按不同的间隔,不同的实现方 : 式去读。 : : 写的只有一个,就没有问题。 : : 你之前说的你的用例也只有一个在写啊。要多个写,那除非搞成数据库类 : 似的
|
s*i 发帖数: 5025 | 15 可以考虑用俩文件折腾。比如写的时候写到一个临时文件里,只有写完了,lreplace
现有文件。
: 只有一个exe程序在不停的写文件。另一个exe程序在不停的读。但是一行没写完
的时候
: ,读就发生了。那读出来的内容就
: 可能不对啊。
: 现在考虑每行加个checksum字段。
:
【在 g****t 的大作中提到】 : 只有一个exe程序在不停的写文件。另一个exe程序在不停的读。但是一行没写完的时候 : ,读就发生了。那读出来的内容就 : 可能不对啊。 : 现在考虑每行加个checksum字段。 : : : 有一段code在间隔性地写,两段不同的code按不同的间隔,不同的实现方 : 式去读。 : : 写的只有一个,就没有问题。 : : 你之前说的你的用例也只有一个在写啊。要多个写,那除非搞成数据库类 : 似的
|
g****t 发帖数: 31659 | 16 是的。如果不用os提供的硬件锁,搞搞软件的dirty trick其实挺有意思的。
这个例子就是单用户一个传感器进来的数据,然后画个图。只要冲突的概率小一些程度
就可以了。
【在 s*i 的大作中提到】 : 可以考虑用俩文件折腾。比如写的时候写到一个临时文件里,只有写完了,lreplace : 现有文件。 : : : 只有一个exe程序在不停的写文件。另一个exe程序在不停的读。但是一行没写完 : 的时候 : : ,读就发生了。那读出来的内容就 : : 可能不对啊。 : : 现在考虑每行加个checksum字段。 : :
|
s*i 发帖数: 5025 | 17 如果数量不是非常大,安全性没有要求,还可以用websocket,或者long-polling,稍
微复杂一点。
优点是实时性强,另外因为服务器端控制什么时候push数据出去,没有数据完整性大顾
虑。
【在 g****t 的大作中提到】 : 是的。如果不用os提供的硬件锁,搞搞软件的dirty trick其实挺有意思的。 : 这个例子就是单用户一个传感器进来的数据,然后画个图。只要冲突的概率小一些程度 : 就可以了。
|
c*******v 发帖数: 2599 | 18 你提醒了我。读写之前看一下时钟,读写的时间错开一定距离,应该就没大问题了。
我只要确保demo的时候不要当场出几个怪图就好。机器一开,这边图画出来的小demo。
【在 s*i 的大作中提到】 : 如果数量不是非常大,安全性没有要求,还可以用websocket,或者long-polling,稍 : 微复杂一点。 : 优点是实时性强,另外因为服务器端控制什么时候push数据出去,没有数据完整性大顾 : 虑。
|