关于C#处理XML的问题

liyomu 2004-11-12 04:05:28
byte[] buffer = new byte[INT_BUFFER_SIZE];
int readByte=0;
//创建一个文件,以二进制形式将基元类型写入流
BinaryWriter bw = new BinaryWriter(fileNew);
XmlTextReader tr = new XmlTextReader(xmlFileName);
tr.WhitespaceHandling = WhitespaceHandling.None;

//读这个文件,让节点停在Base64的节点上
while (tr.Read()) {
if ("Bok" == tr.Name){
break;
}
}
tr.MoveToContent();
println(tr.Name);
//写文件
do {
readByte=tr.ReadBase64(buffer, 0, INT_BUFFER_SIZE);
bw.Write(buffer, 0, readByte);
} while(readByte>=INT_BUFFER_SIZE);
bw.Flush();

//读XML其余内容
String lstrBokName="",lstrCreation="",lstrLastWrite="",lstrLastAccess="",lstrLocalSoapUrl="";
ArrayList larlSql = new ArrayList();
String Sql1="",Sql2="",Sql3="",Sql4="",Sql5="",Sql6="",Sql7="";
while (tr.EOF==false) {
while (tr.Read()) {
if ("BokName" == tr.Name){
lstrBokName = tr.ReadString();
}else if ("Creation" == tr.Name){
lstrCreation = tr.ReadString();
}else if ("LastWrite" == tr.Name){
lstrLastWrite = tr.ReadString();
}else if ("LastAccess" == tr.Name){
lstrLastAccess = tr.ReadString();
}else if ("Revenue_CD" == tr.Name){
STR_RECEIPT_INFO[INT_RECEIPT_INFO_REVENUE_CD] = tr.ReadString();
println("Revenue_CD="+STR_RECEIPT_INFO[INT_RECEIPT_INFO_REVENUE_CD]);
}else if ("Enterprise_CD" == tr.Name){
STR_RECEIPT_INFO[INT_RECEIPT_INFO_ENTERPRISE_CD] = tr.ReadString();
println("Enterprise_CD="+STR_RECEIPT_INFO[INT_RECEIPT_INFO_ENTERPRISE_CD]);
}else if ("Receipt_NO" == tr.Name){
STR_RECEIPT_INFO[INT_RECEIPT_INFO_RECEIPT_NO] = tr.ReadString();
println("Receipt_NO="+STR_RECEIPT_INFO[INT_RECEIPT_INFO_RECEIPT_NO]);
}else if ("Tax_Type" == tr.Name){
STR_RECEIPT_INFO[INT_RECEIPT_INFO_TAX_TYPE] = tr.ReadString();
println("Tax_Type="+STR_RECEIPT_INFO[INT_RECEIPT_INFO_TAX_TYPE]);
}else if ("LocalSoapUrl" == tr.Name){
lstrLocalSoapUrl = tr.ReadString();
}else if ("Sql1" == tr.Name) {
Sql1=tr.ReadString();
larlSql.Add(Sql1.Replace("$#singleQuotation#$", "'"));
}else if("Sql2" == tr.Name) {
Sql2=tr.ReadString();
larlSql.Add(Sql2.Replace("$#singleQuotation#$", "'"));
}else if("Sql3" == tr.Name) {
Sql3=tr.ReadString();
larlSql.Add(Sql3.Replace("$#singleQuotation#$", "'"));
}else if("Sql4" == tr.Name) {
Sql4=tr.ReadString();
larlSql.Add(Sql4.Replace("$#singleQuotation#$", "'"));
}else if("Sql5" == tr.Name) {
Sql5=tr.ReadString();
larlSql.Add(Sql5.Replace("$#singleQuotation#$", "'"));
}else if("Sql6" == tr.Name) {
Sql6=tr.ReadString();
larlSql.Add(Sql6.Replace("$#singleQuotation#$", "'"));
}else if("Sql7" == tr.Name) {
Sql7=tr.ReadString();
larlSql.Add(Sql7.Replace("$#singleQuotation#$", "'"));
}
}
}
tr.Close();
这是我的源代码,因为我机器比较慢,内存小,我的另一个程序在将XML写入硬盘的同时这个程序就开始读文件内容,然后就出错说“该文件正在被另一个程序使用。。。。”,我现在的解决方法是延时1秒钟问题基本上得到解决,但是,在做大量数据的时候就很慢,我想问一下C#有没有什么方法能回避这种现象,如果文件被别人使用时就不去处理,直接做下一个。
谢谢高手帮忙!
...全文
151 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jialiang 2004-11-19
  • 打赏
  • 举报
回复
学习
小蕊_claudia 2004-11-19
  • 打赏
  • 举报
回复
up
520NET 2004-11-19
  • 打赏
  • 举报
回复
LG
赳赳老陈 2004-11-19
  • 打赏
  • 举报
回复
学习
jiezhi 2004-11-19
  • 打赏
  • 举报
回复
for (int i=0;i<fileCount;i++)
{
try
{
// read file
}
catch
{
continue;
}
}
falaowang 2004-11-19
  • 打赏
  • 举报
回复
ding
Jeff20040819 2004-11-19
  • 打赏
  • 举报
回复
学习 接分

110,538

社区成员

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

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

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