记录平常工作笔记(一篇不上博客园首页的博客)(连载)

这是一篇记录平常工作笔记的博客,无论是在排版还是解说上都不会有太多要求。同时这也是一篇不上博客园首页的博客,Just记录一些工作笔记。

v读取csv文件

var allFiles = Directory.GetFiles(@"D:\TestFolder");
            string dataIsNull = @"D:\dataisnull.txt";
            string matchLog = @"D:\matchLog.txt";
            foreach (var filePath in allFiles)
            {
                DataTable dt = new DataTable();
                FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                StreamReader sr = new StreamReader(fs);
                //string fileContent = sr.ReadToEnd();
                //encoding = sr.CurrentEncoding;
                //记录每次读取的一行记录
    string strLine = "";
                //记录每行记录中的各字段内容
    string[] aryLine = null;
                string[] tableHead = null;
                //标示列数
    int columnCount = 0;
                //标示是否是读取的第一行
    bool IsFirst = true;
                //逐行读取CSV中的数据
    while ((strLine = sr.ReadLine()) != null)
                {
                    if (IsFirst == true)
                    {
                        tableHead = strLine.Split(',');
                        IsFirst = false;
                        columnCount = tableHead.Length;
                        //创建列
    for (int i = 0; i < columnCount; i++)
                        {
                            DataColumn dc = new DataColumn(tableHead[i]);
                            dt.Columns.Add(dc);
                        }
                    }
                    else
                    {
                        aryLine = strLine.Split(',');
                        DataRow dr = dt.NewRow();
                        if (aryLine.Length == columnCount)
                        {
                            for (int j = 0; j < columnCount; j++)
                            {
                                dr[j] = aryLine[j];
                            }
                        }
                        dt.Rows.Add(dr);
                    }
                }
                if (aryLine != null && aryLine.Length > 0)
                {
                    dt.DefaultView.Sort = tableHead[0] + " " + "asc";
                }
                sr.Close();
                fs.Close();
                if (dt.Rows.Count == 0)
                {
                    OutputLog(dataIsNull, string.Format("{0} data is null.", filePath));
                    continue;
                }
                StringBuilder mpAttributesLog = new StringBuilder();
                StringBuilder allLog = new StringBuilder();
                foreach (DataRow item in dt.Rows)
                {
                    string mpAttributes = item["MPAttributes"].ToString();
                    var mpAttributesList = mpAttributes.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
                    string metaFeatures = item["MetaFeatures"].ToString().ToUpper();
                    string sha1 = item["Sha1"].ToString();
                    foreach (var mpAttributesItem in mpAttributesList)
                    {
                        if (!metaFeatures.Contains(mpAttributesItem.ToUpper().Trim()))
                        {
                            mpAttributesLog.AppendFormat("{0};", mpAttributesItem);
                        }
                    }
                    //allLog.AppendLine(string.Format("{0}\n{1}\n{2}\n", mpAttributesLog.ToString(), sha1, metaFeatures));
    if (mpAttributesLog.Length != 0)
                    {
                        using (StreamWriter sw = File.AppendText(matchLog))
                        {
                            sw.WriteLine(mpAttributesLog.ToString());
                            sw.WriteLine(sha1);
                            sw.WriteLine(metaFeatures);
                        }
                    }
                }
                //if (mpAttributesLog.Length != 0)
                //{
                //    OutputLog(matchLog, string.Format("{0} data is null.", allLog.ToString()));
                //}
            }

v图片水印

    /**/
    /// 
    /// 水印位置
    /// 
    public enum ImagePosition
    {
        /**/
    /// 
    /// 左上
        /// 
        LeftTop,
        /**/
    /// 
    /// 左下
        /// 
        LeftBottom,
        /**/
    /// 
    /// 右上
        /// 
        RightTop,
        /**/
    /// 
    /// 右下
        /// 
        RigthBottom,
        /**/
    /// 
    /// 顶部居中
        /// 
        TopMiddle,
        /**/
    /// 
    /// 底部居中
        /// 
        BottomMiddle,
        /**/
    /// 
    /// 中心
        /// 
        Center
    }
    /**/
    /// 
    /// 图像操作类(主要用于给图片加上透明文字水印)
    /// 
    class ImageWater_Word
    {
        private string _ErrMsg;
        #region 出错信息
    /**/
    /// 
    /// 出错信息
        /// 
    public string ErrMsg
        {
            get { return _ErrMsg; }
            set { _ErrMsg = value; }
        }
        #endregion
    #region 将文件转换成流
    //public byte[] SetImageToByteArray(string fileName, ref string fileSize)
    /**/
    /// 
    /// 将文件转换成流
        /// 
    /// 文件全路径
    /// 
    private byte[] SetImageToByteArray(string fileName)
        {
            byte[] image = null;
            try
            {
                FileStream fs = new FileStream(fileName, FileMode.Open);
                FileInfo fileInfo = new FileInfo(fileName);
                //fileSize = Convert.ToDecimal(fileInfo.Length / 1024).ToString("f2") + " K";
    int streamLength = (int)fs.Length;
                image = new byte[streamLength];
                fs.Read(image, 0, streamLength);
                fs.Close();
                return image;
            }
            catch
            {
                return image;
            }
        }
        #endregion
    #region 将byte转换成MemoryStream类型
    /**/
    /// 
    /// 将byte转换成MemoryStream类型
        /// 
    /// byte[]变量
    /// 
    private MemoryStream ByteToStream(byte[] mybyte)
        {
            MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);
            return mymemorystream;
        }
        #endregion
    #region 将byte转换成Image文件
    /**/
    /// 
    /// 将byte转换成Image文件
        /// 
    /// byte[]变量
    /// 
    private System.Drawing.Image SetByteToImage(byte[] mybyte)
        {
            System.Drawing.Image image;
            MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);
            image = System.Drawing.Image.FromStream(mymemorystream);
            return image;
        }
        #endregion
    #region 批量在图片上添加透明水印文字
    /**/
    /// 
    /// 批量在图片上添加透明水印文字
        /// 
    /// 原来图片地址(路径+文件名)
    /// 需要添加到图片上的文字
    /// 透明度(0.1~1.0之间)
    /// 文字显示的位置
    /// 是否覆盖原图片(如果不覆盖,那么将在同目录下生成一个文件名带0207的文件)
    /// 
    public bool DrawWords(string[] arrsourcePicture, string waterWords, float alpha, ImagePosition position, bool fRewrite)
        {
            foreach (string imgPath in arrsourcePicture)
            {
                if (!DrawWord(imgPath, waterWords, alpha, position, fRewrite))
                {
                    _ErrMsg += "——处理文件:" + imgPath + " 时出错。";
                    return false;
                }
            }
            return true;
        }
        #endregion
    #region 在图片上添加透明水印文字
    /**/
    /// 
    /// 在图片上添加透明水印文字
        /// 
    /// 原来图片地址(路径+文件名)
    /// 需要添加到图片上的文字
    /// 透明度(0.1~1.0之间)
    /// 文字显示的位置
    /// 是否覆盖原图片(如果不覆盖,那么将在同目录下生成一个文件名带0207的文件)
    /// 
    public bool DrawWord(string sourcePicture, string waterWords, float alpha, ImagePosition position, bool fRewrite)
        {
            if (!System.IO.File.Exists(sourcePicture))
            {
                _ErrMsg = "文件不存在!";
                return false;
            }
            string fileExtension = System.IO.Path.GetExtension(sourcePicture).ToLower();
            if (fileExtension != ".gif" && fileExtension != ".jpg" && fileExtension != ".png" && fileExtension != ".bmp")
            {
                _ErrMsg = "不是图片文件!";
                return false;
            }
            Image imgPhoto = null;
            Bitmap bmPhoto = null;
            Graphics grPhoto = null;
            try
            {
                //创建一个图片对象用来装载要被添加水印的图片
                imgPhoto = Image.FromStream(ByteToStream(SetImageToByteArray(sourcePicture)));
                //获取图片的宽和高
    int phWidth = imgPhoto.Width;
                int phHeight = imgPhoto.Height;
                //建立一个bitmap,和我们需要加水印的图片一样大小
                bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);
                //SetResolution:设置此 Bitmap 的分辨率
                //这里直接将我们需要添加水印的图片的分辨率赋给了bitmap
                bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
                //Graphics:封装一个 GDI+ 绘图图面。
                grPhoto = Graphics.FromImage(bmPhoto);
                //设置图形的品质
                grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
                //将我们要添加水印的图片按照原始大小描绘(复制)到图形中
                grPhoto.DrawImage(
                 imgPhoto,                                           //   要添加水印的图片
    new Rectangle(0, 0, phWidth, phHeight), //  根据要添加的水印图片的宽和高
    0,                                                     //  X方向从0点开始描绘
    0,                                                     // Y方向 
                 phWidth,                                            //  X方向描绘长度
                 phHeight,                                           //  Y方向描绘长度
                 GraphicsUnit.Pixel);                              // 描绘的单位,这里用的是像素
                //根据图片的大小我们来确定添加上去的文字的大小
                //在这里我们定义一个数组来确定
    int[] sizes = new int[] { 48, 36, 28, 24, 16, 14, 12, 10 };
                //字体
                Font crFont = null;
                //矩形的宽度和高度,SizeF有三个属性,分别为Height高,width宽,IsEmpty是否为空
                SizeF crSize = new SizeF();
                //利用一个循环语句来选择我们要添加文字的型号
                //直到它的长度比图片的宽度小
    for (int i = 0; i < sizes.Length; i++)
                {
                    crFont = new Font("arial", sizes[i], FontStyle.Bold);
                    //测量用指定的 Font 对象绘制并用指定的 StringFormat 对象格式化的指定字符串。
                    crSize = grPhoto.MeasureString(waterWords, crFont);
                    // ushort 关键字表示一种整数数据类型
    if ((ushort)crSize.Width < (ushort)phWidth)
                        break;
                }
                //截边5%的距离,定义文字显示(由于不同的图片显示的高和宽不同,所以按百分比截取)
    int yPixlesFromBottom = (int)(phHeight * .05);
                //定义在图片上文字的位置
    float wmHeight = crSize.Height;
                float wmWidth = crSize.Width;
                float xPosOfWm;
                float yPosOfWm;
                //设置水印的位置
    switch (position)
                {
                    case ImagePosition.BottomMiddle:
                        xPosOfWm = phWidth / 2;
                        yPosOfWm = phHeight - wmHeight - 10;
                        break;
                    case ImagePosition.Center:
                        xPosOfWm = phWidth / 2;
                        yPosOfWm = phHeight / 2;
                        break;
                    case ImagePosition.LeftBottom:
                        xPosOfWm = wmWidth;
                        yPosOfWm = phHeight - wmHeight - 10;
                        break;
                    case ImagePosition.LeftTop:
                        xPosOfWm = wmWidth / 2;
                        yPosOfWm = wmHeight / 2;
                        break;
                    case ImagePosition.RightTop:
                        xPosOfWm = phWidth - wmWidth - 10;
                        yPosOfWm = wmHeight;
                        break;
                    case ImagePosition.RigthBottom:
                        xPosOfWm = phWidth - wmWidth - 10;
                        yPosOfWm = phHeight - wmHeight - 10;
                        break;
                    case ImagePosition.TopMiddle:
                        xPosOfWm = phWidth / 2;
                        yPosOfWm = wmWidth;
                        break;
                    default:
                        xPosOfWm = wmWidth;
                        yPosOfWm = phHeight - wmHeight - 10;
                        break;
                }
                //封装文本布局信息(如对齐、文字方向和 Tab 停靠位),显示操作(如省略号插入和国家标准 (National) 数字替换)和 OpenType 功能。
                StringFormat StrFormat = new StringFormat();
                //定义需要印的文字居中对齐
                StrFormat.Alignment = StringAlignment.Center;
                //SolidBrush:定义单色画笔。画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径。
                //这个画笔为描绘阴影的画笔,呈灰色
    int m_alpha = Convert.ToInt32(255 * alpha);
                SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0));
                //描绘文字信息,这个图层向右和向下偏移一个像素,表示阴影效果
                //DrawString 在指定矩形并且用指定的 Brush 和 Font 对象绘制指定的文本字符串。
                grPhoto.DrawString(waterWords,                                    //string of text
                                           crFont,                                         //font
                                           semiTransBrush2,                            //Brush
    new PointF(xPosOfWm + 1, yPosOfWm + 1),  //Position
                                           StrFormat);
                //从四个 ARGB 分量(alpha、红色、绿色和蓝色)值创建 Color 结构,这里设置透明度为153
                //这个画笔为描绘正式文字的笔刷,呈白色
                SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(80, 255, 255, 255));
                //第二次绘制这个图形,建立在第一次描绘的基础上
                grPhoto.DrawString(waterWords,                 //string of text
                                           crFont,                                   //font
                                           semiTransBrush,                           //Brush
    new PointF(xPosOfWm, yPosOfWm),  //Position
                                           StrFormat);
                //imgPhoto是我们建立的用来装载最终图形的Image对象
                //bmPhoto是我们用来制作图形的容器,为Bitmap对象
                imgPhoto = bmPhoto;
                //释放资源,将定义的Graphics实例grPhoto释放,grPhoto功德圆满
                //grPhoto.Dispose();
                //将grPhoto保存
    if (fRewrite)
                {
                    imgPhoto.Save(sourcePicture);
                }
                else
                {
                    // 目标图片名称及全路径
    string targetImage = sourcePicture.Replace(System.IO.Path.GetExtension(sourcePicture), "") + "_0207" + fileExtension;
                    imgPhoto.Save(targetImage);
                }
                //imgPhoto.Dispose();
    return true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
                return false;
            }
            finally
            {
                if (imgPhoto != null)
                    imgPhoto.Dispose();
                if (bmPhoto != null)
                    bmPhoto.Dispose();
                if (grPhoto != null)
                    grPhoto.Dispose();
            }
        }
        #endregion
    }

vappSettings读取及配置

记录平常工作笔记(一篇不上博客园首页的博客)(连载)_第1张图片

private static string localFolder = System.Configuration.ConfigurationSettings.AppSettings["localFolder"];

vI/O

读txt

using (StreamReader streamReader = new StreamReader(@"E:\Test\local.txt"))
            {
                while ((lineLocal = streamReader.ReadLine()) != null)
                {
                    lineLocal = lineLocal.Trim();
                    if (!string.IsNullOrEmpty(lineLocal))
                    {
                        localList.Add(lineLocal);
                    }
                }
            }

写txt

List<string> stringList = new List<string>();
//  覆盖原有的信息
 using (StreamWriter sw = new StreamWriter(@"E:\SQLTest\Test.txt"))
            {
                foreach (string text in stringList)
                {
                    sw.WriteLine(text);
                }
            }
// 不覆盖原有的信息
using (StreamWriter sw = File.AppendText(filePath))
            {
                sw.WriteLine(message);

            }

获取文件后缀名:Path.GetExtension(file)

获取文件名   称:Path.GetFileName(file)

获取文件所有文件:Directory.GetFiles(localFolder)

获取绝对路径:Path.GetFullPath(System.Configuration.ConfigurationSettings.AppSettings["localFolder"])

v计算起始时间

记录平常工作笔记(一篇不上博客园首页的博客)(连载)_第2张图片

vDictionary根据key得到value

记录平常工作笔记(一篇不上博客园首页的博客)(连载)_第3张图片

vCOM组建导出EXCEL

        private static System.Data.DataTable GetExcelData(string excelFilePath)
        {
            Excel.Application app = new Excel.Application();
            Excel.Sheets sheets;
            Excel.Workbook workbook = null;
            object oMissiong = System.Reflection.Missing.Value;
            System.Data.DataTable dt = new System.Data.DataTable();
            try
            {
                if (app == null)
                {
                    return null;
                }

                workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
                sheets = workbook.Worksheets;
                Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
                if (worksheet == null)
                    return null;

                string cellContent;
                int iRowCount = worksheet.UsedRange.Rows.Count;
                int iColCount = worksheet.UsedRange.Columns.Count;
                Excel.Range range;
                DataColumn dc;
                int ColumnID = 1;
                range = (Excel.Range)worksheet.Cells[1, 1];
                while (range.Text.ToString().Trim() != "")
                {
                    dc = new DataColumn();
                    dc.DataType = System.Type.GetType("System.String");
                    dc.ColumnName = range.Text.ToString().Trim();
                    dt.Columns.Add(dc);

                    range = (Excel.Range)worksheet.Cells[1, ++ColumnID];
                }

                for (int iRow = 2; iRow <= iRowCount; iRow++)
                {
                    DataRow dr = dt.NewRow();

                    for (int iCol = 1; iCol <= iColCount; iCol++)
                    {
                        range = (Excel.Range)worksheet.Cells[iRow, iCol];

                        cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
                        dr[iCol - 1] = cellContent;
                    }

                    dt.Rows.Add(dr);
                }

                return dt;
            }
            catch
            {

                return null;
            }
            finally
            {
                workbook.Close(false, oMissiong, oMissiong);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
                workbook = null;
                app.Workbooks.Close();
                app.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
                app = null;
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

 

完美解决: Retrieving the COM class factory for component with CLSID {00024500-0000-000 (未成功)

记录平常工作笔记(一篇不上博客园首页的博客)(连载)_第4张图片

在服务器上,

1,运行dcomcnfg打开组件服务

2,依次展开"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

3,找到"Microsoft Excel应用程序"

右键打开属性对话框 点击"安全"选项卡, 把"启动和激活权限","配置权限",都选择为自定义, 然后依次点击它们的编辑,把ASPNET添加进去,并加入所有的权限..

记录平常工作笔记(一篇不上博客园首页的博客)(连载)_第5张图片

vList去除重复项

namespace TestApp

{

    using System;

    using System.Collections.Generic;

    using System.Linq;

 

    class Program

    {

        static  void Main(string[] args)

        {

            List<Info> info =  new List<Info>();

            info.Add(new Info()  { Id ="Test1", Name ="Test1"});

            info.Add(new Info()  { Id ="Test1", Name ="Test1"});

            info.Add(new Info()  { Id ="Test2", Name ="Test2"});

            info.Add(new Info()  { Id ="Test3", Name ="Test3"});

            info.Add(new Info()  { Id ="Test3", Name ="Test3"});

            info = info.Distinct(new Comparint()).ToList();

            Console.WriteLine(info.Count);

        }

    }

 

    public  class Info

    {

        public string Id { get; set;  }

        public string Name { get; set;  }

    }

 

    public  class Comparint : IEqualityComparer<Info>

    {

 

        public bool Equals(Info x, Info y)

        {

            if  (x == null && y == null)

                return  false;

            return x.Id == y.Id;

        }

 

        public  int GetHashCode(Info obj)

        {

            return obj.ToString().GetHashCode();

        }

    }

}

vSQLServer 分页查询

SQLServer 的数据分页:

假设现在有这样的一张表:
CREATE TABLE test
(
 id int primary key not null identity,
 names varchar(20)
)
然后向里面插入大约1000条数据,进行分页测试
假设页数是10,现在要拿出第5页的内容,查询语句如下:
--10代表分页的大小
select top 10 *
from test
where id not in
(
 --40是这么计算出来的:10*(5-1)
 select top 40 id from test order by id
)
order by id
原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素


第二种方法:
还是以上面的结果为例,采用另外的一种方法
--数据的意思和上面提及的一样
select top 10 *
from test
where id >
(
 select isnull(max(id),0)
 from 
  (
   select top 40 id from test order by id
  ) A
)
order by id
原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0
然后查询id值大于前40条记录的最大id值的记录。
这个查询有一个条件,就是id必须是int类型的。


第三种方法:
select top 10 *
from 
(
 select row_number() over(order by id) as rownumber,* from test
) A
where rownumber > 40
原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录
这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的

第四种:
存储过程查询
创建存储过程
alter procedure pageDemo
@pageSize int,
@page int
AS
declare @temp int
set @temp=@pageSize*(@page - 1)
begin
 select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by id
end
执行存储过程
exec 10,5

你可能感兴趣的:(记录平常工作笔记(一篇不上博客园首页的博客)(连载))