首页 新闻 会员 周边

silverlight读取写入txt记事本问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-07 13:39

   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();

这是为什么呢
                
            }

GIS之家的主页 GIS之家 | 初学一级 | 园豆:59
提问于:2012-12-05 10:55
< >
分享
最佳答案
0

啥异常?没有权限吧。

收获园豆:10
Launcher | 高人七级 |园豆:45045 | 2012-12-05 11:24

出现“流不可写”异常

GIS之家 | 园豆:59 (初学一级) | 2012-12-05 11:29

@oolili: Application.GetResourceStream 返回的是只读流,不能写。文件是存在放远程站点上的。也就是说,你的使用方法是错误的。

Launcher | 园豆:45045 (高人七级) | 2012-12-05 11:51

@Launcher: 那有没有其他的思路或是想法呢,可以实现写入txt??

GIS之家 | 园豆:59 (初学一级) | 2012-12-05 12:29

@oolili: 写入并不难,难得是你如何控制并发。你可以写一个简单的WCF服务,通过调用服务往指定文件写入数据。但是这没考虑并发的问题,因为在你的场景中比较复杂。你是否想过你为什么要这样做?你的需求是否可以由别的方式来实现?

Launcher | 园豆:45045 (高人七级) | 2012-12-05 13:10

@Launcher: 我的本意是想实现一个简单的记录访问在线人数及总人数功能,实现方式是读取写入txt,而不是数据库,像你所说的并发方式我确实没有考虑到过,考虑的不够

GIS之家 | 园豆:59 (初学一级) | 2012-12-05 14:07

@oolili: Application.GetResourceStream 是不受控制的,所以你需要把读取操作和写入操作都单独作为WCF服务暴露出来,在实现时,任何读、写文件的操作都需要使用同一把锁。

Launcher | 园豆:45045 (高人七级) | 2012-12-05 14:46

@Launcher: 嗯嗯,说的是,刚才我改为WCF服务方式调用服务,可以进行简单的读取写入,谢谢大师的指点,呵呵

GIS之家 | 园豆:59 (初学一级) | 2012-12-05 15:38
其他回答(2)
0

如果想用 silverlight 直接对客户端的文件进行操作,默认是没有这个权限的。除非是 使用 OOB,独立存储,或者升级到 5,然后使用 浏览器内提升权限才可以。

收获园豆:10
geass.. | 园豆:1821 (小虾三级) | 2012-12-05 20:27

我用的就是silverlight5的,请教一下,使用 浏览器内提升权限,怎么提升呢,可以详细讲解一下么

支持(0) 反对(0) GIS之家 | 园豆:59 (初学一级) | 2012-12-05 20:30

@oolili: 这个很麻烦的,参考 创建Silverlight 5浏览器内受信应用,除了 程序要配置外,每个使用到的客户端也做 修改注册表,安装证书。

支持(0) 反对(0) geass.. | 园豆:1821 (小虾三级) | 2012-12-06 07:45

@geass..: 首先需要启用浏览器内受信应用权限,这可直接通过修改注册表来完成:
注册表路径:HKEY_LOCAL_MACHINE\Software\Microsoft\Silverlight\
值名称:AllowElevatedTrustAppsInBrowser
值类型:DWORD

 

这一步我的注册表没找到,那是为什么呢

支持(0) 反对(0) GIS之家 | 园豆:59 (初学一级) | 2012-12-06 21:37

@oolili: 没有就新建一个 AllowElevatedTrustAppsInBrowser

支持(0) 反对(0) geass.. | 园豆:1821 (小虾三级) | 2012-12-06 21:45

@geass..: 嗯嗯,这样子很是都设置好了的话,运行时候是在浏览器里面的吗,还是脱离浏览器形式了?

支持(0) 反对(0) GIS之家 | 园豆:59 (初学一级) | 2012-12-07 10:13

@oolili: 直接在浏览器里就 有客户端文件操作的权限,例如 文件的全路径属性,代码里还是加上 Application.Current.HasElevatedPermissions 判断一下权限。

支持(0) 反对(0) geass.. | 园豆:1821 (小虾三级) | 2012-12-07 11:02
0

LZ知道OOB不需要修改注册表的方式,使用C++的XcpControlHost(替代宿主)和silverlight使用COM通信不?高了好久,都不知道,该怎么弄啊

@夏天 | 园豆:104 (初学一级) | 2014-01-09 15:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册