标签: c#

  • C# 每两位插入一个空格

    C# 每两位插入一个空格

    string txt = "12345678" ;
    string result = Regex .Replace(txt, @"(\d{2}(?!$))", "$1 " );

    每N位插入一个就把2改成N


    上面只分操作全是数字的,如果是适应所有的,可以把\d换成.

    string txt = "ABCD1E2F4G" ;
    string result = Regex .Replace(txt, @"(.{2}(?!$))", "$1 " );

  • ado.net 连接mysql的类

    ado.net 连接mysql的类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data;
    using MySql.Data.MySqlClient;
    
    namespace VideoSpider
    {
        public class DBConn
        {
    #if DEBUG
            private static   string _connectionString = @"server=61.164.149.180;User ID=sql_zuqiu;Password=FULFQcvuFsqnbQSL;database=zuqiu_bak;";
    #else
            private static string _connectionString = @"server=localhost;User=11xs;Password=HPU3aMJVzECQfVXR;database=11xs";
    #endif
            public static MySqlConnection OpenConnection( string connstr = "" )
            {
    
                if (connstr != "" )
                {
                    _connectionString = connstr;
                }
                var conn = new MySqlConnection(_connectionString);
                conn.Open();
                return conn;
            }
        }
    }
  • C#非独占加载图片

    C#非独占加载图片

    Image _Image = Image .FromStream(new MemoryStream(System.IO.File .ReadAllBytes(Application.StartupPath + "\\v.jpg")));
    pictureBox1.Image = _Image;

  • C#在线程中使用Invoke来调用UI线程里的控件

    C#在线程中使用Invoke来调用UI线程里的控件

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    
    namespace TextTool
    {
        public partial class Form1 : Form
        {
            private Thread workThread = null; //工作线程
            private List <string> fileList = new List <string>();
            public Form1()
            {
                InitializeComponent();
            }
    
            // 导入 可多选
            private void button1_Click(object sender, EventArgs e)
            {
                Stream mystream;
                OpenFileDialog openfiledialog1 = new OpenFileDialog();
                openfiledialog1.Multiselect = true;//允许同时选择多个文件
                openfiledialog1.Filter = "txt files(*.txt)|*.txt|All files(*.*)|*.*" ;
                openfiledialog1.FilterIndex = 1;
                openfiledialog1.RestoreDirectory = true;
                if (openfiledialog1.ShowDialog() == DialogResult.OK)
                {
                    if ((mystream = openfiledialog1.OpenFile()) != null)
                    {
                        fileList.Clear();
                        for (int fi = 0; fi < openfiledialog1.FileNames.Length; fi++)
                        {
                            fileList.Add(openfiledialog1.FileNames[fi]);
                        }
                        mystream.Close();
                    }
    
                    listView1.Items.Clear();
                    foreach (var filePath in fileList)
                    {
                        ListViewItem lvi = new ListViewItem(filePath);
                        listView1.Items.Add(lvi);
                    }
                }
            }
    
            // 合并处理并输出
            private void button2_Click(object sender, EventArgs e)
            {
                if (fileList.Count == 0)
                {
                    MessageBox.Show("请先添加要处理的文件" );
                    return;
                }
    
                SaveFileDialog savefiledialog1 = new SaveFileDialog();
                savefiledialog1.Filter = "txt files(*.txt)|*.txt" ;
                if (savefiledialog1.ShowDialog() == DialogResult.OK)
                {
                    button2.Text = "处理中..." ;
                    button2.Enabled = false;
    
                    workThread = new Thread (WorkThread);
                    workThread.Start(savefiledialog1.FileName);
                }
            }
    
            private int MyCompareString(string x, string y)
            {
                int pos1 = x.IndexOf("(" );
                int pos2 = x.IndexOf(")" );
                int cnt1 = Convert .ToInt32(x.Substring(pos1 + 1, pos2-pos1 -1));
    
                pos1 = y.IndexOf( "(");
                pos2 = y.IndexOf( ")");
                int cnt2 = Convert .ToInt32(y.Substring(pos1 + 1, pos2 - pos1 - 1));
     
                if (cnt1 > cnt2)
                {
                    return -1;
                }
                else if (cnt1< cnt2)
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
    
            public void WorkThread(object savePath)
            {
                List<string > allLines = new List< string>();
                foreach (var filePath in fileList)
                {
                    allLines.AddRange( File.ReadAllLines(filePath));
                }
    
                int totalCount = 0;
                List<string > outputList = new List< string>();
                foreach (var line in (from t in allLines where t.Trim() != "" select t).Distinct())
                {
                    int count = (from c in allLines where c == line select c).Count();
                    totalCount += count;
                    outputList.Add( $"{line} ( {count})");
                }
                outputList.Sort(MyCompareString);
                outputList.Add( $"总数:{totalCount}" );
                File.WriteAllLines(savePath.ToString(), outputList);
    
                Invoke( new MethodInvoker (delegate ()
                {
                    button2.Text = "合并处理输出" ;
                    button2.Enabled = true;
                    MessageBox.Show("处理完成!" );
                }));
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (workThread != null && workThread.IsAlive)
                {
                    workThread.Abort();
                }
            }
        }
    }
    

    如果是WPF程序,则在线程中像下面这样操作控件

    this.Dispatcher.Invoke(new Action( delegate
    {
        lblState.Content = "正在检测域名" + fullUrl;
    }));
  • C#使用OleDB连接Access数据库

    C#使用OleDB连接Access数据库的代码:

    public class DbHelper
    {
        static DbHelper()
        {
            connectionString = GetConnectionString();
        }
    
        private static string connectionString;
    
        private static string GetConnectionString()
        {
            return string.Format( "File Name={0}\\link.udl", Application .StartupPath);
        }
    
    
        public static DataTable ExecuteDataTable( string sql)
        {
            try
            {
                using ( OleDbDataAdapter da = new OleDbDataAdapter (sql, connectionString))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    return ds.Tables[0];
                }
            }
            catch( Exception e)
            {
                MessageBox.Show(e.Message);
                return null;
            }
    
        }
    
        public static void ExecuteNonQuery( string sql)
        {
            using ( OleDbConnection conn = new OleDbConnection (connectionString))
            {
                try
                {
                    conn.Open();
    
                    OleDbCommand cmd = conn.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                }
                finally
                {
                    if (conn.State == ConnectionState.Open) conn.Close();
                }
            }          
        }
    
    }
  • C#判断一个类型是否是集合类型

    C#判断一个类型是否是集合类型:

    typeof(T).GetTypeInfo().ImplementedInterfaces.Contains(typeof(IEnumerable))

  • C# 遍历文件下所有文件

    C# 遍历文件下所有文件

    string[] files = Directory .GetFiles(Application.StartupPath, "*.mdb", SearchOption .AllDirectories);

    如果要遍历所有的,把 *.mdb 改成*即可。

  • C#二维数组的定义

    C#二维数组的定义

    string[,] items = new string[_totalCount, 32];

    string[][] = new string[32][]; 是有区别的。

  • C#读取十六进制文件

    C#读取十六进制文件

    BinaryReader br = new BinaryReader( File.OpenRead(_fileName));
    br.BaseStream.Position = 0xF; 
    string first_player = br.ReadByte().ToString("X2"); //ToString("X2") 为C#中的字符串格式控制符。X表示十六进制,2为每次都是两位数
    br.Close();
    MessageBox.Show(first_player);
  • C#使用Uri.EscapeDataString对URL参数进行编码

    System.Web.HttpUtility.UrlEncode

    都是对参数进行编码,要像下面这样写:

    string data = string.Format(@"{{""ptwebqq"":""{0}"",""clientid"":{1},""psessionid"":""{2}"",""status"":""online""}}", _PTWebQQ, ClientID, PSessionID);
    data = "r=" + Uri.EscapeDataString(data);

    而不要把r=也编码进去!!!

    血的教训,一晚上加一上午都浪费在这上面了!!!!

    而python的urllib.parse.urlencode传入的是字典,所以避免了这个坑。