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);
}
}
}