解决再送100分  XDocument.Save方法出现异常,求可能原因 

accomp 2013-03-26 02:26:37
public void MakeIDListFile(string fileName, string[] idList)
{

XDocument doc = new XDocument();
XDeclaration declaration = new XDeclaration("1.0", "shift_jis", "yes");
doc.Declaration = declaration;
XElement idListElement = new XElement("ID_LIST");
doc.Add(idListElement);

XElement idElemtent;
for (int i = 0; i < idList.Length; i++)
{
idElemtent = new XElement("ID");
idElemtent.Add(idList[i]);
idListElement.Add(idElemtent);
}
doc.Save(fileName); }

异常信息如下
System.IO.IOException: 要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。

場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
場所 System.Xml.XmlWriter.Create(String outputFileName, XmlWriterSettings settings)
場所 System.Xml.Linq.XDocument.Save(String fileName, SaveOptions options)
場所 System.Xml.Linq.XDocument.Save(String fileName)
場所 XXXXXXXXX.common.util.CommonService.MakeIDListFile(String fileName, String[] pnList)

这个异常的可能的汉语意思:请求的操作无法在使用用户映射区域打开的文件上执行
程序一直正常运行,某日连续发生几次这个异常,过了段时间又正常运行。

什么原因可能导致这个异常呢?  文件不存在,文件无法访问,路经错误等都不是报这个错。


...全文
399 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
accomp 2013-03-27
  • 打赏
  • 举报
回复
引用 19 楼 chate 的回复:
[quote=引用 16 楼 accomp 的回复:] [quote=引用 15 楼 chate 的回复:] 不懂,帮你顶一下! 版主:为什么限制每贴最高一百分呢?我一个300分的帖子只结给回答者一百分,另两个帖子他一直没登录过也没顶,所以一直给不了他分!
等级高了帖子分数也能提高[/quote]我在asp板块好像是4个三角了,也还是只能发一百分的帖子!应该是极少数人可以发高分帖子吧![/quote] 用户等级 用户的等级是按照用户在每一个大版块所获得的专家分来计算的,用户在不同的大版块,会有不同的等级。 用户等级不同,可发帖的最大分数不同。 一角到三角用户 最大可发100分帖子; 四角至一星用户 最大可发200分帖子; 两星以上用户 最大可发300分帖子。 另外,帖子发出后,帖主或版主可以通过加分功能给帖子加分。
wxsxiaoK 2013-03-27
  • 打赏
  • 举报
回复
应该是多线程访问 导致的
chate 2013-03-27
  • 打赏
  • 举报
回复
引用 16 楼 accomp 的回复:
[quote=引用 15 楼 chate 的回复:] 不懂,帮你顶一下! 版主:为什么限制每贴最高一百分呢?我一个300分的帖子只结给回答者一百分,另两个帖子他一直没登录过也没顶,所以一直给不了他分!
等级高了帖子分数也能提高[/quote]我在asp板块好像是4个三角了,也还是只能发一百分的帖子!应该是极少数人可以发高分帖子吧!
gxingmin 2013-03-27
  • 打赏
  • 举报
回复
是往 局域网 共享上写吗? 看着像是没有写权限的错误
肖无疾 2013-03-27
  • 打赏
  • 举报
回复
先google日文看到一堆结果,然后找到了对应的英文 The requested operation cannot be performed on a file with a user-mapped section open 然后用英文再google一下 http://stackoverflow.com/questions/1047616/whats-wrong-when-the-requested-operation-cannot-be-performed-on-a-file-with-a 这里说有可能是杀毒软件等会监视文件的程序造成的,也有可能是循环创建文件太快了,上一个还没关闭
accomp 2013-03-27
  • 打赏
  • 举报
回复
引用 15 楼 chate 的回复:
不懂,帮你顶一下! 版主:为什么限制每贴最高一百分呢?我一个300分的帖子只结给回答者一百分,另两个帖子他一直没登录过也没顶,所以一直给不了他分!
等级高了帖子分数也能提高
chate 2013-03-27
  • 打赏
  • 举报
回复
不懂,帮你顶一下! 版主:为什么限制每贴最高一百分呢?我一个300分的帖子只结给回答者一百分,另两个帖子他一直没登录过也没顶,所以一直给不了他分!
shawn_yang 2013-03-26
  • 打赏
  • 举报
回复
可能一个程序没关,又打开一个程序生成了
accomp 2013-03-26
  • 打赏
  • 举报
回复
引用 12 楼 zhs23 的回复:
那就是用户权限问题吧?
是WINFORM的 根权限无关,就那一天某机器发生异常,过一段时间再次运行正常。
迷迷520 2013-03-26
  • 打赏
  • 举报
回复
那就是用户权限问题吧?
accomp 2013-03-26
  • 打赏
  • 举报
回复
如果是多人同时占用一个文件,后打开的会提示访问拒绝. 自己测试过,  文件夹没有相应的操作权限  文件不存在  该文件被其它人打开没有关闭 等都可以排除 另外,这个xml文件是在临时文件夹存数据用,文件夹命名是用Guid.NewGuid()命名,重名的可能基本没用.用户自己用自己的,多人操作的可能也基本没有. 所以,那个异常怎么出来,真的很迷茫.
迷迷520 2013-03-26
  • 打赏
  • 举报
回复
你这个程序应该是WEB的把? WINFORM触发的几率很小的
迷迷520 2013-03-26
  • 打赏
  • 举报
回复
这就是因为多人同时使用了同一个XML导致的。 当然访问量大的时候才会出现这个问题。 建议这种换成数据库,可以避免同时占用问题。
Scorip 2013-03-26
  • 打赏
  • 举报
回复
引用 2 楼 liuchaolin 的回复:
个人认为应该是文件被同时占用,没有即时释放资源引起的
这个可能性很大。
Scorip 2013-03-26
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaop 的回复:
目测是系统问题,,你看都乱码了... 要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。 これは何機八ものですね きっとシステムの問題
这是外资企业的PC。。。。
amityat 2013-03-26
  • 打赏
  • 举报
回复
操作xml文件,一般检查下这样几个方面, 1,权限, 2,进程占用,是否发生资源抢占情况 3,文件特别大,内存资源情况。 doc.save前查看下文件是否存在,资源释放等操作,一般都没有问题.
by_封爱 版主 2013-03-26
  • 打赏
  • 举报
回复
目测是系统问题,,你看都乱码了... 要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。 これは何機八ものですね きっとシステムの問題
阿怅 2013-03-26
  • 打赏
  • 举报
回复
是不是XML文件写好之后,然后以非只读的方式打开,再次写入导致的文件占用?
niss 2013-03-26
  • 打赏
  • 举报
回复
会不会没有考虑到线程间的安全?一旦多线程操作就出现IO冲突呢?
md5e 2013-03-26
  • 打赏
  • 举报
回复
个人认为应该是文件被同时占用,没有即时释放资源引起的
加载更多回复(1)
C#版的微信公众号开发SDK Senparc.Weixin.MP几个关键类介绍如下: Entities/Request*.cs 用于接收微信平台自动发到服务器的实体(发过来的是XML),包括文本、位置、图片三类 Entities/Response*.cs 用于反馈给发人的信息实体(最终会转成XML),包括文本、新闻(图文)两类 Helpers/EntityHelper.cs 用于实体和XML之间的转换(由于其中有许多需要特殊处理的字段和类型,这里不能简单用XML序列化) Helpers/MsgTypeHelper.cs 用于获取消息类型 CheckSignature.cs 验证请合法性类 Enums.cs 各种枚举 RequestMessageFactory.cs 用于自动生成不同Request类型的实体,并作必要的数据填充 Senparc.Weixin.MP几个关键类及重要方法(按一般使用过程排序) 生成验证字符串:Senparc.Weixin.MP.CheckSignature.GetSignature(string timestamp, string nonce, string token = null),返回根据微信平台提供的数据,SHA1加密后的验证字符串(注意token必须跟公众平台的设置一直) 验证请:Senparc.Weixin.MP.CheckSignature.Check(string signature, string timestamp, string nonce, string token = null),验证请是否合法 获取请实体:var requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(XDocument doc); 根据不同请的类型,自动生成可用于操作的实体(doc只需要用XDocument.Parse(xmlString)就能生成),requestMessage.MsgType就是请枚举类型。 进行判断及各类操作。 根据需要,创建响应类型的实体,如:var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; 即可返回文本类型信息。 由于目前微信只接受XML的返回数据,所以在返回之前还需要做一次转换:XDocument responseDoc = Senparc.Weixin.MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); var xmlString =responseDoc.ToString();
Entities/Request*.cs 用于接收微信平台自动发到服务器的实体(发过来的是XML),包括文本、位置、图片三类 Entities/Response*.cs 用于反馈给发人的信息实体(最终会转成XML),包括文本、新闻(图文)两类 Helpers/EntityHelper.cs 用于实体和XML之间的转换(由于其中有许多需要特殊处理的字段和类型,这里不能简单用XML序列化) Helpers/MsgTypeHelper.cs 用于获取消息类型 CheckSignature.cs 验证请合法性类 Enums.cs 各种枚举 RequestMessageFactory.cs 用于自动生成不同Request类型的实体,并作必要的数据填充 Senparc.Weixin.MP几个关键类及重要方法(按一般使用过程排序) 生成验证字符串:Senparc.Weixin.MP.CheckSignature.GetSignature(string timestamp, string nonce, string token = null),返回根据微信平台提供的数据,SHA1加密后的验证字符串(注意token必须跟公众平台的设置一直) 验证请:Senparc.Weixin.MP.CheckSignature.Check(string signature, string timestamp, string nonce, string token = null),验证请是否合法 获取请实体:var requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(XDocument doc); 根据不同请的类型,自动生成可用于操作的实体(doc只需要用XDocument.Parse(xmlString)就能生成),requestMessage.MsgType就是请枚举类型。 进行判断及各类操作。 根据需要,创建响应类型的实体,如:var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; 即可返回文本类型信息。 由于目前微信只接受XML的返回数据,所以在返回之前还需要做一次转换:XDocument responseDoc = Senparc.Weixin.MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); var xmlString =responseDoc.ToString(); 至此整个微信公众账号的自动响应过程结束。 下面可以直接下载源代码及示例(示例是ASP.NET MVC 4,.NET 4.0,为了提高兼容性,Senparc.Weixin.MP源代码使用.NET 3.5): 压缩包中包含三个文件夹:Senparc.Weixin.MP、Senparc.Weixin.MP.BuildOutPut、Senparc.Weixin.MP.Sample,别对应Senparc.Weixin.MP.dll源代码项目、Senparc.Weixin.MP.dll输出目录、Web示例,Web示例建议放到公网测试,让公众平台自动发

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧