关于C#处理XML的问题
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#有没有什么方法能回避这种现象,如果文件被别人使用时就不去处理,直接做下一个。
谢谢高手帮忙!