using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; namespace HxBusiness { public class ConfigBiz { private const int TryReadWriteCount = 10; private int readcount = 0; private int writecount = 0; /// /// 指定程序目录 /// private string xmlPath; //设置读写锁 private ReaderWriterLockSlim objlock; public ConfigBiz() { xmlPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/Config/"; objlock = new ReaderWriterLockSlim(); } /// /// 写json到文件 /// /// 任意模型,根据模型匹配文件名 /// 返回指定模型数据 /// public bool WriteDb(object parm) { objlock.EnterWriteLock(); try { string fileName = typeof(T).Name.ToString() + ".json"; //如果没有则创建文件夹 if (!Directory.Exists(xmlPath)) { Directory.CreateDirectory(xmlPath); }//如果没有则创建文件 if (!File.Exists(xmlPath + fileName)) { FileStream fs1 = new FileStream(xmlPath + fileName, FileMode.Create, FileAccess.ReadWrite); fs1.Close(); } else { //保证每次文件的更新 FileInfo finfo = new FileInfo(xmlPath + fileName); finfo.Delete(); FileStream fs1 = new FileStream(xmlPath + fileName, FileMode.Create, FileAccess.ReadWrite); fs1.Close(); } File.WriteAllText(xmlPath + fileName, JsonConvert.SerializeObject(parm, Formatting.Indented)); return true; } catch (Exception ex) { Console.WriteLine("write error!" + ex.ToString()); //CreateLog.Log.Error("write error!" + ex.ToString()); if (writecount < TryReadWriteCount) { Thread.Sleep(1); writecount++; WriteDb(parm); } return false; } finally { objlock.ExitWriteLock(); } } /// /// 读文件到json /// /// 任意模型,根据模型匹配文件名 /// public string ReadDb() { //using (BaseAccess access = new BaseAccess()) //{ // List lsit = access.Select(); //} objlock.EnterReadLock(); try { string fileName = typeof(T).Name.ToString() + ".json"; //如果没有则创建文件夹 if (!Directory.Exists(xmlPath)) { Directory.CreateDirectory(xmlPath); }//如果没有则创建文件 if (!File.Exists(xmlPath + fileName)) { FileStream fs1 = new FileStream(xmlPath + fileName, FileMode.Create, FileAccess.ReadWrite); fs1.Close(); return null; } else { var temp = File.ReadAllText(xmlPath + fileName); return temp; //return JsonConvert.DeserializeObject>(temp); } } catch (Exception ex) { Console.WriteLine("read error!" + ex.ToString()); if (readcount < TryReadWriteCount) { Thread.Sleep(1); readcount++; ReadDb(); } //CreateLog.Log.Error("read error!" + ex.ToString()); return null; } finally { objlock.ExitReadLock(); } } } }