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
|
{
|
/// <summary>
|
/// 工具类
|
/// </summary>
|
public class Tools
|
{
|
/// <summary>
|
/// 基础目录
|
/// </summary>
|
public static readonly string BaseDir = AppDomain.CurrentDomain.BaseDirectory;
|
|
private static PostgreHelper _dbHelper;
|
|
/// <summary>
|
/// DB帮助类
|
/// </summary>
|
public static PostgreHelper DBHelper
|
{
|
get
|
{
|
if (null == _dbHelper)
|
{
|
_dbHelper = new PostgreHelper();
|
}
|
|
return _dbHelper;
|
}
|
}
|
|
/// <summary>
|
/// 字节格式化
|
/// </summary>
|
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]);
|
}
|
|
/// <summary>
|
/// 换算为MB
|
/// </summary>
|
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);
|
}
|
|
/// <summary>
|
/// 保留3位小数
|
/// </summary>
|
public static double Round3(double val)
|
{
|
string str = string.Format("{0:F3}", val);
|
|
return double.Parse(str);
|
}
|
|
/// <summary>
|
/// 获取设置
|
/// </summary>
|
public static string GetSetting(string key)
|
{
|
if (!ConfigurationManager.AppSettings.AllKeys.Contains(key)) return null;
|
|
return ConfigurationManager.AppSettings[key];
|
}
|
|
/// <summary>
|
/// 获取Db参数
|
/// </summary>
|
public static List<DbParameter> GetParams<T>(string sql, T t)
|
{
|
List<DbParameter> list = new List<DbParameter>();
|
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;
|
}
|
|
/// <summary>
|
/// 执行命令
|
/// </summary>
|
/// <param name="list">命令集合</param>
|
public static string ExecCmd(List<string> 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;
|
}
|
|
/// <summary>
|
/// 删除路径
|
/// </summary>
|
public static string DelPath(string path)
|
{
|
List<string> list = new List<string>();
|
list.Add(string.Format("rd \"{0}\" /s /q", path));
|
|
return ExecCmd(list);
|
}
|
|
/// <summary>
|
/// 获取本机IP
|
/// </summary>
|
/// <returns></returns>
|
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");
|
}
|
}
|
}
|