StreamResourceInfo text = Application.GetResourceStream(new Uri("txt/访问总人数.txt", UriKind.RelativeOrAbsolute));
using(StreamReader read = new StreamReader(text.Stream))
{
string line = read.ReadLine()
read.Close();
}
这样子是没有问题的,可以读取。
但是写入这样写就有问题了,抛出异常:
StreamResourceInfo text = Application.GetResourceStream(new Uri("txt/访问总人数.txt", UriKind.RelativeOrAbsolute));
using(StreamWriter writer = new StreamWriter(text.Stream))
{
writer.WriteLine("2");
writer.Close();
这是为什么呢
}
啥异常?没有权限吧。
出现“流不可写”异常
@oolili: Application.GetResourceStream 返回的是只读流,不能写。文件是存在放远程站点上的。也就是说,你的使用方法是错误的。
@Launcher: 那有没有其他的思路或是想法呢,可以实现写入txt??
@oolili: 写入并不难,难得是你如何控制并发。你可以写一个简单的WCF服务,通过调用服务往指定文件写入数据。但是这没考虑并发的问题,因为在你的场景中比较复杂。你是否想过你为什么要这样做?你的需求是否可以由别的方式来实现?
@Launcher: 我的本意是想实现一个简单的记录访问在线人数及总人数功能,实现方式是读取写入txt,而不是数据库,像你所说的并发方式我确实没有考虑到过,考虑的不够
@oolili: Application.GetResourceStream 是不受控制的,所以你需要把读取操作和写入操作都单独作为WCF服务暴露出来,在实现时,任何读、写文件的操作都需要使用同一把锁。
@Launcher: 嗯嗯,说的是,刚才我改为WCF服务方式调用服务,可以进行简单的读取写入,谢谢大师的指点,呵呵
如果想用 silverlight 直接对客户端的文件进行操作,默认是没有这个权限的。除非是 使用 OOB,独立存储,或者升级到 5,然后使用 浏览器内提升权限才可以。
我用的就是silverlight5的,请教一下,使用 浏览器内提升权限,怎么提升呢,可以详细讲解一下么
@oolili: 这个很麻烦的,参考 创建Silverlight 5浏览器内受信应用,除了 程序要配置外,每个使用到的客户端也做 修改注册表,安装证书。
@geass..: 首先需要启用浏览器内受信应用权限,这可直接通过修改注册表来完成:
注册表路径:HKEY_LOCAL_MACHINE\Software\Microsoft\Silverlight\
值名称:AllowElevatedTrustAppsInBrowser
值类型:DWORD
这一步我的注册表没找到,那是为什么呢
@oolili: 没有就新建一个 AllowElevatedTrustAppsInBrowser
@geass..: 嗯嗯,这样子很是都设置好了的话,运行时候是在浏览器里面的吗,还是脱离浏览器形式了?
@oolili: 直接在浏览器里就 有客户端文件操作的权限,例如 文件的全路径属性,代码里还是加上 Application.Current.HasElevatedPermissions 判断一下权限。
LZ知道OOB不需要修改注册表的方式,使用C++的XcpControlHost(替代宿主)和silverlight使用COM通信不?高了好久,都不知道,该怎么弄啊