【C#】代碼整理備忘——1

1.wpf中彈出窗口信息提示:

MessageBox.Show("請先加載模型");

2.打開文件夾用:

System.Windows.Forms.FolderBrowserDialog dir = new System.Windows.Forms.FolderBrowserDialog();
       if (dir.ShowDialog() == System.Windows.Forms.DialogResult.OK)
       {
        //正式獲得所有圖片的路徑                                   
       }

3.打開單個文件用:

                OpenFileDialog open_model_dialog = new OpenFileDialog();
                open_model_dialog.Filter = "模型文件|*.model";//此處限定可以選擇的相關後綴文件
                open_model_dialog.Multiselect = false;
                open_model_dialog.Title = "加載模型";
                if (open_model_dialog.ShowDialog() ?? false)
                {
                    string model_file_path = open_model_dialog.FileName;
                    //如果模型文件不存在則拋出錯誤
                    CNTKLibraryManagedExamples.CNTKModelCalledByCSharp.ThrowIfFileNotExist(model_file_path, string.Format("Error: The model does not exist.", model_file_path));
                    //加載模型
                    model_func = Function.Load(model_file_path, DeviceDescriptor.CPUDevice);
                }

4.打try-catch的配合:

            try
            {
               ////

            }
            catch (Exception load_model_error)
            {
                ////MessageBox.Show("加載模型出錯    錯誤信息:" + load_model_error.Message);
            }

5.Path的各種操作,需要引用System.IO:

class Program
    {
        static void Main(string[] args)
        {

            //獲取當前運行程序的目錄
            string fileDir = Environment.CurrentDirectory;
            Console.WriteLine("當前程序目錄:"+fileDir);
            
            //一個文件目錄
            string filePath = "C:\\JiYF\\BenXH\\BenXHCMS.xml";
            Console.WriteLine("該文件的目錄:"+filePath);

            string str = "獲取文件的全路徑:" + Path.GetFullPath(filePath);   //-->C:\JiYF\BenXH\BenXHCMS.xml
            Console.WriteLine(str);
            str = "獲取文件所在的目錄:" + Path.GetDirectoryName(filePath); //-->C:\JiYF\BenXH
            Console.WriteLine(str);
            str = "獲取文件的名稱含有後綴:" + Path.GetFileName(filePath);  //-->BenXHCMS.xml
            Console.WriteLine(str);
            str = "獲取文件的名稱沒有後綴:" + Path.GetFileNameWithoutExtension(filePath); //-->BenXHCMS
            Console.WriteLine(str);
            str = "獲取路徑的後綴擴展名稱:" + Path.GetExtension(filePath); //-->.xml
            Console.WriteLine(str);
            str = "獲取路徑的根目錄:" + Path.GetPathRoot(filePath); //-->C:\
            Console.WriteLine(str);
            Console.ReadKey();

        }
    }

參考於https://www.cnblogs.com/Joezhang433/p/10064535.html

5.Bitmap格式的讀取:

Bitmap bmp = new Bitmap(Bitmap.FromFile(image_path));

6.將float或者double轉換成兩位小數的str:

String.Format("{0:F}", i)
或者
d.ToString("0.00###");

7.關於ref和out:
都是針對int這種類型的參數,傳實參進去
1 關於重載

原則:有out|ref關鍵字的方法可以與無out和ref關鍵字的方法構成重載;但如想在out和ref間重載,編譯器將提示:不能定義僅在ref和out的上的方法重載

2 關於調用前初始值

原則:ref作爲參數的函數在調用前,實參必須賦初始值。否則編譯器將提示:使用了未賦值的局部變量;

out作爲參數的函數在調用前,實參可以不賦初始值。

3 關於在函數內,引入的參數初始值問題

原則:在被調用函數內,out引入的參數在返回前至少賦值一次,否則編譯器將提示:使用了未賦值的out參數;

在被調用函數內,ref引入的參數在返回前不必爲其賦初值。

但比不是說,引用類型就一定不會用到ref關鍵字,當我們試圖將引用類型的重新賦值時

public void Changeref(RefClass rc)

{rc = new RefClass() { IntValue = 1000 };}

如果不加ref ,prc實際上是在函數內部將引用的地址,指向了另一new RefClass(),返回值會發現它的值未發生改變

8.通過遞歸獲取總文件夾下的所有文件和所有子文件路徑:

        private void GetAllImages(string path,List<string> image_patch_list)
        {
            //總的目錄信息對象
            DirectoryInfo dir = new DirectoryInfo(path);
            //返回當前目錄的文件列表
            FileInfo[] dir_files = dir.GetFiles();

            foreach (FileInfo file in dir_files)
            {
                if (file.FullName.ToUpper().EndsWith("JPG") | file.FullName.ToUpper().EndsWith("PNG")| 
                    file.FullName.ToUpper().EndsWith("BMP") | file.FullName.ToUpper().EndsWith("JPEG"))
                {
                    image_patch_list.Add(file.FullName);
                }                   
            }
            DirectoryInfo[] dir_subfolder = dir.GetDirectories();
            //獲取子文件夾內的文件列表,遞歸遍歷  
            foreach (DirectoryInfo d in dir_subfolder)
            {
                GetAllImages(d.FullName, image_patch_list);
            }
        }
                /// <summary>
        /// 通過遞歸過得總文件夾下的所有子文件夾路徑
        /// </summary>
        /// <param name="path">總文件路徑</param>
        /// <param name="image_patch_list">包含的所有子文件夾路徑</param>
        private void GetAllFolder(string path, List<string> image_patch_list)
        {
            DirectoryInfo dir = new DirectoryInfo(path);
            DirectoryInfo[] dir_subfolder = dir.GetDirectories();
            FileInfo[] dir_files = dir.GetFiles();
            //如果該文件夾下無子文件夾
            if(dir_subfolder.Length == 0)
            {
                //把該文件夾路徑加入
                image_patch_list.Add(dir.FullName);
            }
            //該文件夾下有子文件夾
            else
            {   
                //對每個子文件夾進行遞歸
                foreach(DirectoryInfo d in dir_subfolder)
                {
                    GetAllFolder(d.FullName, image_patch_list);
                }
            } 
        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章