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();
}
}
}
}