如题,部分代码如下:long fileLength;
string server = string.Format(@"{0}/Update/AutoUpdate.xml", ConfigurationManager.AppSettings["ServerUpdateAddress"]);
string client = string.Format("{0}\\{1}", Directory.GetCurrentDirectory(), ConfigurationManager.AppSettings["ClientUpdateAddress"]);
WebRequest request = WebRequest.Create(server);
WebResponse response = request.GetResponse();
fileLength = response.ContentLength;
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
byte[] byteData = new byte[fileLength];
//int allDataLength = byteData.Length;
//int startDataLength = 0; FileStream file = new FileStream(client, FileMode.OpenOrCreate);
file.Write(byteData, 0, byteData.Length);
file.Flush(); stream.Close();
reader.Close();
file.Close();
主要是从服务器端读取文件写入到本地的一个文件夹中,server变量是服务器url地址,client是本地存放文件的地址
string server = string.Format(@"{0}/Update/AutoUpdate.xml", ConfigurationManager.AppSettings["ServerUpdateAddress"]);
string client = string.Format("{0}\\{1}", Directory.GetCurrentDirectory(), ConfigurationManager.AppSettings["ClientUpdateAddress"]);
WebRequest request = WebRequest.Create(server);
WebResponse response = request.GetResponse();
fileLength = response.ContentLength;
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
byte[] byteData = new byte[fileLength];
//int allDataLength = byteData.Length;
//int startDataLength = 0; FileStream file = new FileStream(client, FileMode.OpenOrCreate);
file.Write(byteData, 0, byteData.Length);
file.Flush(); stream.Close();
reader.Close();
file.Close();
主要是从服务器端读取文件写入到本地的一个文件夹中,server变量是服务器url地址,client是本地存放文件的地址
解决方案 »
- DropDownList在前台设置SelectedValue??不能以声明的方式设置“SelectedValue”属性
- 偶的神,DataList调出来的分类,链接搞不上去啊。
- 关于页面布局问题
- 高手进,API问题.
- 网站在此浏览器上的问题
- 在线求救gridview隐藏列的问题
- 各位都用哪个控件来显示数据库的数据???
- TreeView的NodeData怎样回传呢?
- 代码如何读取脚本变量?
- 急~~~~~ASP.NET URL重写问题!
- System.Net.Sockets.SocketException: 无法立即完成一个非阻挡性套接字操作。
- 如何将页面导出成word后 在最后一页最底部加上固定文字,所加的文字总是显示在最底部
额,那个路径太长了,所以我省略掉了,不是空的
具体有示例代码吗?我没做过这种,是第一次做,请指点一下
另外,这个问题要怎么解决才好,我在网上看的都是这样写的代码~~为什么我这里会出这种问题呢?写到本地难道文件夹还要设置权限,应该不用吧,那每次安装程序之后不是都要到安装目录里把文件夹设置权限,这样很不人性化啊
这个我可以肯定,文件夹是空的~~
====>
你要把文件保存到哪里去?ftp?
server是服务器端空间文件的url,如:http://www.mymange.cn/Update/AutoUpdate.xml
要把这个xml文件保存到本地电脑上的Update文件夹中
要把这个xml文件保存到本地电脑上的Update文件夹中
====>
这样我觉得不太可行,我没有看到过直接使用一个http网址来向其写数据的。但可以通过C#发送Http请求,把数据Post到指定站点上。但这样做似乎太麻烦。要把这个xml文件保存到本地电脑上的Update文件夹中
====> 为什么不直接Save到本地电脑上的Update文件夹呢?
什么方法能Save到本地电脑上,我在网上找了好久才找到上面那个方法,别的没见过
写到本地文件夹也要设置权限,这样做并非不人性化,而是出于安全性的考虑。IIS用Network Service这个账号运行,所以你检查下client目录是否有NetworkService这个账号的写权限。直接下载保存的方法是WebClient.DownloadFile方法,像这样写
new WebClient().DownloadFile(server,client);
你可以试下,不过这个方法差不多只是把你写的那几句话打包封装了一下,如果还是出错,基本上就可以肯定是权限问题了。
我觉得应该不是权限的问题吧,我把FileStream对象写为FileStream(client,FileMode.Create, FileAccess.Read, FileShare.ReadWrite);这样就没出错,但是创建出来的文件里面都是空值
我用FileStream对象的Write方法写入数据啦,数据是从byte[] byteData = new byte[fileLength];的数据写入的,我跟踪到这里,变量不是空的,说明里面是有值的
string server = string.Format(@"{0}/Update/AutoUpdate.xml", ConfigurationManager.AppSettings["ServerUpdateAddress"]);
string client = string.Format("{0}\\{1}", Directory.GetCurrentDirectory(), ConfigurationManager.AppSettings["ClientUpdateAddress"]);
WebRequest request = WebRequest.Create(server);
WebResponse response = request.GetResponse();
fileLength = response.ContentLength;
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
byte[] byteData = new byte[fileLength]; stream.Read(byteData, 0, (int)fileLength);
//FileStream file = new FileStream(client, FileMode.OpenOrCreate);
FileStream file = new FileStream(client, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
file.Write(byteData, 0, byteData.Length); file.Flush();
stream.Close();
reader.Close();
file.Close();
不明白到底为什么会这样
就是要有文件名~~~但是如果我下载的是一个dll文件,覆盖掉原来的dll文件之后,程序就不能正常运行了,提示说该模块应该有一个程序集清单~~请问这又是怎么回事?
分快没了,这个问题解决结贴的时候会追加分数给各位的,希望能解决这个问题~~
http://hi.baidu.com/360desk/blog/item/4f4d61d7f583e42506088bb4.html
讲的很详细你可以去看看
你发那个是WEB的,我写的是WinForm的,那个是可以通用的吗?现在是能从服务器把文件读写下来到本地电脑,但是部分信息会丢失,就比如程序编译生成的dll文件,通过我那个代码读写下来的时候,就不能用了~~一般生成dll之后好像有个版本号,但是如果我那代码读写下来,那个版本号什么的就都没有了,我用记事本打开两个文件对比,坏的那个里面少了很多数据,但是两个文件大小都一样,好像读下来的时候很多都是空值了,不知道怎么回事?我是想把软件做成支持在线更新版本那样的,我的思路是我编译生成新的dll,然后上传到服务器空间,客户通过我的软件从服务器空间把dll文件下载到软件的安装目录覆盖掉原来的dll完成升级
晕啊大哥,你看下我25楼的回复吧
dll文件要保证没有被加载,被加载以后是锁上的
这里的加载指的是运行EXE程序之后,程序在使用的意思吗?如果是这样,我在覆盖原来的DLL文件时会让程序关闭的
你随便找个什么程序看看,只要有自动更新的,都会有另外的APP。
就是说有个主应用程序,还有一个update.exe.这是一个单独的应用程序。
不可能主程序和app集成在一个程序中,因为只要主程序启动,就会调用引用的资源如DLL,等,这些资源北占用着怎么可能被替换呢
是的啊,就如你所说的那样,但是我是通过主程序调用Update.exe出来执行,同时关闭掉主程序,这个时候只有Update.exe在运行,而且dll文件只有主程序在用,升级的时候主程序已经被我关闭了,所以能替换掉唉,我晚上下班回家再捣鼓捣鼓吧
我用你说的WebClient就没问题了,可以下载到本地~~~
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("****", "****"); client.DownloadFile("http://www.mymangeoo.cn/Update/ZLXControl.GridSystem.dll", string.Format("{0}\\Update\\ZLXControl.GridSystem.dll", Directory.GetCurrentDirectory()));
这样是不是就证明不是权限的问题了?
下次注意,唉,主要是到C#版块发,回复的人数要比这边少,我等不及呀,呵呵