using Npgsql;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.Common;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Reflection;
namespace DataLoader.CS
{
///
/// 工具类
///
public class Tools
{
///
/// 基础目录
///
public static readonly string BaseDir = AppDomain.CurrentDomain.BaseDirectory;
private static PostgreHelper _dbHelper;
///
/// DB帮助类
///
public static PostgreHelper DBHelper
{
get
{
if (null == _dbHelper)
{
_dbHelper = new PostgreHelper();
}
return _dbHelper;
}
}
///
/// 字节格式化
///
public static string FormatBytes(long bytes)
{
string[] Suffix = { "B", "KB", "MB", "GB", "TB" }; // Byte
int i = 0;
double dblSByte = bytes;
if (bytes > 1024)
for (i = 0; (bytes / 1024) > 0; i++, bytes /= 1024)
dblSByte = bytes / 1024.0;
return string.Format("{0:0.##} {1}", dblSByte, Suffix[i]);
}
///
/// 换算为MB
///
public static double SizeToMb(long size)
{
if (size < 1050)
{
return 0.001;
}
string str = string.Format("{0:F3}", size / 1024.0 / 1024.0);
return double.Parse(str);
}
///
/// 保留3位小数
///
public static double Round3(double val)
{
string str = string.Format("{0:F3}", val);
return double.Parse(str);
}
///
/// 获取设置
///
public static string GetSetting(string key)
{
if (!ConfigurationManager.AppSettings.AllKeys.Contains(key)) return null;
return ConfigurationManager.AppSettings[key];
}
///
/// 获取Db参数
///
public static List GetParams(string sql, T t)
{
List list = new List();
Type tType = typeof(T);
BindingFlags flags = BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance;
int start = sql.IndexOf("@");
while (start != -1)
{
int end = sql.IndexOf(",", start);
if (end == -1) end = sql.IndexOf(")", start);
if (end == -1) end = sql.IndexOf(" ", start);
if (end == -1) end = sql.Length;
string name = sql.Substring(start + 1, end - start - 1);
PropertyInfo pi = tType.GetProperty(name, flags);
if (pi != null)
{
object value = pi.GetValue(t, null);
DbParameter dp = new NpgsqlParameter("@" + name, value);
list.Add(dp);
}
start = sql.IndexOf("@", end);
}
return list;
}
///
/// 执行命令
///
/// 命令集合
public static string ExecCmd(List list)
{
string str = null;
Process p = null;
try
{
p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.Start();
StreamWriter si = p.StandardInput;
StreamReader se = p.StandardError;
LogOut.Info("cmd = " + string.Join(",", list));
si.AutoFlush = true;
foreach (string cmd in list)
{
si.WriteLine(cmd);
}
si.WriteLine("exit");
str = se.ReadToEnd();
se.Close();
si.Close();
}
catch (Exception ex)
{
LogOut.Error(ex.Message + "\r\n" + ex.StackTrace);
str = ex.Message;
}
finally
{
if (p != null)
{
p.Close();
p = null;
}
}
return str;
}
///
/// 删除路径
///
public static string DelPath(string path)
{
List list = new List();
list.Add(string.Format("rd \"{0}\" /s /q", path));
return ExecCmd(list);
}
///
/// 获取本机IP
///
///
public static string GetLocalIP()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
return GetSetting("localIP");
}
}
}