c# 文件及目錄操作類


18位長度的計時周期數: DateTime.Now.Ticks.ToString()

 

 

多數是收集而來,加上測試感覺很不錯,分享一下或許有些幫助吧:

引用:

 

[csharp]  view plain copy
  1. using System;  
  2. using System.Text;  
  3. using System.IO;  


主代碼:

 

 

[csharp]  view plain copy
  1. namespace PorjectTools  
  2. {  
  3.     ///<summary>  
  4.     ///</summary>  
  5.     public static class FileHelper  
  6.     {  
  7.         #region 檢測指定目錄是否存在  
  8.         /// <summary>  
  9.         /// 檢測指定目錄是否存在  
  10.         /// </summary>  
  11.         /// <param name="directoryPath">目錄的絕對路徑</param>          
  12.         public static bool IsExistDirectory(string directoryPath)  
  13.         {  
  14.             return Directory.Exists(directoryPath);  
  15.         }  
  16.         #endregion  
  17.  
  18.         #region 檢測指定文件是否存在  
  19.         /// <summary>  
  20.         /// 檢測指定文件是否存在,如果存在則返回true。  
  21.         /// </summary>  
  22.         /// <param name="filePath">文件的絕對路徑</param>          
  23.         public static bool IsExistFile(string filePath)  
  24.         {  
  25.             return File.Exists(filePath);  
  26.         }  
  27.         #endregion  
  28.  
  29.         #region 檢測指定目錄是否為空  
  30.         /// <summary>  
  31.         /// 檢測指定目錄是否為空  
  32.         /// </summary>  
  33.         /// <param name="directoryPath">指定目錄的絕對路徑</param>          
  34.         public static bool IsEmptyDirectory(string directoryPath)  
  35.         {  
  36.             try  
  37.             {  
  38.                 //判斷是否存在文件  
  39.                 string[] fileNames = GetFileNames(directoryPath);  
  40.                 if (fileNames.Length > 0)  
  41.                 {  
  42.                     return false;  
  43.                 }  
  44.   
  45.                 //判斷是否存在文件夾  
  46.                 string[] directoryNames = GetDirectories(directoryPath);  
  47.                 return directoryNames.Length <= 0;  
  48.             }  
  49.             catch  
  50.             {  
  51.                 return false;  
  52.             }  
  53.         }  
  54.         #endregion  
  55.  
  56.         #region 檢測指定目錄中是否存在指定的文件  
  57.         /// <summary>  
  58.         /// 檢測指定目錄中是否存在指定的文件,若要搜索子目錄請使用重載方法.  
  59.         /// </summary>  
  60.         /// <param name="directoryPath">指定目錄的絕對路徑</param>  
  61.         /// <param name="searchPattern">模式字符串,"*"代表0或N個字符,"?"代表1個字符。  
  62.         /// 范例:"Log*.xml"表示搜索所有以Log開頭的Xml文件。</param>          
  63.         public static bool Contains(string directoryPath, string searchPattern)  
  64.         {  
  65.             try  
  66.             {  
  67.                 //獲取指定的文件列表  
  68.                 string[] fileNames = GetFileNames(directoryPath, searchPattern, false);  
  69.   
  70.                 //判斷指定文件是否存在  
  71.                 return fileNames.Length != 0;  
  72.             }  
  73.             catch  
  74.             {  
  75.                 return false;  
  76.             }  
  77.         }  
  78.   
  79.         /// <summary>  
  80.         /// 檢測指定目錄中是否存在指定的文件  
  81.         /// </summary>  
  82.         /// <param name="directoryPath">指定目錄的絕對路徑</param>  
  83.         /// <param name="searchPattern">模式字符串,"*"代表0或N個字符,"?"代表1個字符。  
  84.         /// 范例:"Log*.xml"表示搜索所有以Log開頭的Xml文件。</param>   
  85.         /// <param name="isSearchChild">是否搜索子目錄</param>  
  86.         public static bool Contains(string directoryPath, string searchPattern, bool isSearchChild)  
  87.         {  
  88.             try  
  89.             {  
  90.                 //獲取指定的文件列表  
  91.                 string[] fileNames = GetFileNames(directoryPath, searchPattern, true);  
  92.   
  93.                 //判斷指定文件是否存在  
  94.                 return fileNames.Length != 0;  
  95.             }  
  96.             catch  
  97.             {  
  98.                 return false;  
  99.             }  
  100.         }  
  101.         #endregion  
  102.  
  103.         #region 創建一個目錄  
  104.         /// <summary>  
  105.         /// 創建一個目錄  
  106.         /// </summary>  
  107.         /// <param name="directoryPath">目錄的絕對路徑</param>  
  108.         public static void CreateDirectory(string directoryPath)  
  109.         {  
  110.             //如果目錄不存在則創建該目錄  
  111.             if (!IsExistDirectory(directoryPath))  
  112.             {  
  113.                 Directory.CreateDirectory(directoryPath);  
  114.             }  
  115.         }  
  116.         #endregion  
  117.  
  118.         #region 創建一個文件  
  119.         /// <summary>  
  120.         /// 創建一個文件。  
  121.         /// </summary>  
  122.         /// <param name="filePath">文件的絕對路徑</param>  
  123.         public static bool CreateFile(string filePath)  
  124.         {  
  125.             try  
  126.             {  
  127.                 //如果文件不存在則創建該文件  
  128.                 if (!IsExistFile(filePath))  
  129.                 {  
  130.                     //創建一個FileInfo對象  
  131.                     FileInfo file = new FileInfo(filePath);  
  132.                     //創建文件  
  133.                     FileStream fs = file.Create();  
  134.                     //關閉文件流  
  135.                     fs.Close();  
  136.                 }  
  137.             }  
  138.             catch  
  139.             {  
  140.                 return false;  
  141.             }  
  142.   
  143.             return true;  
  144.         }  
  145.   
  146.         /// <summary>  
  147.         /// 創建一個文件,並將字節流寫入文件。  
  148.         /// </summary>  
  149.         /// <param name="filePath">文件的絕對路徑</param>  
  150.         /// <param name="buffer">二進制流數據</param>  
  151.         public static bool CreateFile(string filePath, byte[] buffer)  
  152.         {  
  153.             try  
  154.             {  
  155.                 //如果文件不存在則創建該文件  
  156.                 if (!IsExistFile(filePath))  
  157.                 {  
  158.                     //創建一個FileInfo對象  
  159.                     FileInfo file = new FileInfo(filePath);  
  160.   
  161.                     //創建文件  
  162.                     FileStream fs = file.Create();  
  163.   
  164.                     //寫入二進制流  
  165.                     fs.Write(buffer, 0, buffer.Length);  
  166.   
  167.                     //關閉文件流  
  168.                     fs.Close();  
  169.                 }  
  170.             }  
  171.             catch  
  172.             {  
  173.                 return false;  
  174.             }  
  175.             return true;  
  176.         }  
  177.         #endregion  
  178.  
  179.         #region 獲取文本文件的行數  
  180.         /// <summary>  
  181.         /// 獲取文本文件的行數  
  182.         /// </summary>  
  183.         /// <param name="filePath">文件的絕對路徑</param>          
  184.         public static int GetLineCount(string filePath)  
  185.         {  
  186.             //將文本文件的各行讀到一個字符串數組中  
  187.             string[] rows = File.ReadAllLines(filePath);  
  188.   
  189.             //返回行數  
  190.             return rows.Length;  
  191.         }  
  192.         #endregion  
  193.  
  194.         #region 獲取一個文件的長度  
  195.         /// <summary>  
  196.         /// 獲取一個文件的長度,單位為Byte  
  197.         /// </summary>  
  198.         /// <param name="filePath">文件的絕對路徑</param>          
  199.         public static int GetFileSize(string filePath)  
  200.         {  
  201.             //創建一個文件對象  
  202.             FileInfo fi = new FileInfo(filePath);  
  203.   
  204.             //獲取文件的大小  
  205.             return (int)fi.Length;  
  206.         }  
  207.   
  208.         /// <summary>  
  209.         /// 獲取一個文件的長度,單位為KB  
  210.         /// </summary>  
  211.         /// <param name="filePath">文件的路徑</param>          
  212.         public static double GetFileSizeByKB(string filePath)  
  213.         {  
  214.             //創建一個文件對象  
  215.             FileInfo fi = new FileInfo(filePath);  
  216.             long size = fi.Length / 1024;  
  217.             //獲取文件的大小  
  218.             return double.Parse(size.ToString());  
  219.         }  
  220.   
  221.         /// <summary>  
  222.         /// 獲取一個文件的長度,單位為MB  
  223.         /// </summary>  
  224.         /// <param name="filePath">文件的路徑</param>          
  225.         public static double GetFileSizeByMB(string filePath)  
  226.         {  
  227.             //創建一個文件對象  
  228.             FileInfo fi = new FileInfo(filePath);  
  229.             long size = fi.Length / 1024 / 1024;  
  230.             //獲取文件的大小  
  231.             return double.Parse(size.ToString());  
  232.         }  
  233.         #endregion  
  234.  
  235.         #region 獲取指定目錄中的文件列表  
  236.         /// <summary>  
  237.         /// 獲取指定目錄中所有文件列表  
  238.         /// </summary>  
  239.         /// <param name="directoryPath">指定目錄的絕對路徑</param>          
  240.         public static string[] GetFileNames(string directoryPath)  
  241.         {  
  242.             //如果目錄不存在,則拋出異常  
  243.             if (!IsExistDirectory(directoryPath))  
  244.             {  
  245.                 throw new FileNotFoundException();  
  246.             }  
  247.   
  248.             //獲取文件列表  
  249.             return Directory.GetFiles(directoryPath);  
  250.         }  
  251.   
  252.         /// <summary>  
  253.         /// 獲取指定目錄及子目錄中所有文件列表  
  254.         /// </summary>  
  255.         /// <param name="directoryPath">指定目錄的絕對路徑</param>  
  256.         /// <param name="searchPattern">模式字符串,"*"代表0或N個字符,"?"代表1個字符。  
  257.         /// 范例:"Log*.xml"表示搜索所有以Log開頭的Xml文件。</param>  
  258.         /// <param name="isSearchChild">是否搜索子目錄</param>  
  259.         public static string[] GetFileNames(string directoryPath, string searchPattern, bool isSearchChild)  
  260.         {  
  261.             //如果目錄不存在,則拋出異常  
  262.             if (!IsExistDirectory(directoryPath))  
  263.             {  
  264.                 throw new FileNotFoundException();  
  265.             }  
  266.   
  267.             try  
  268.             {  
  269.                 return Directory.GetFiles(directoryPath, searchPattern, isSearchChild ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);  
  270.             }  
  271.             catch  
  272.             {  
  273.                 return null;  
  274.             }  
  275.         }  
  276.         #endregion  
  277.  
  278.         #region 獲取指定目錄中的子目錄列表  
  279.         /// <summary>  
  280.         /// 獲取指定目錄中所有子目錄列表,若要搜索嵌套的子目錄列表,請使用重載方法.  
  281.         /// </summary>  
  282.         /// <param name="directoryPath">指定目錄的絕對路徑</param>          
  283.         public static string[] GetDirectories(string directoryPath)  
  284.         {  
  285.             try  
  286.             {  
  287.                 return Directory.GetDirectories(directoryPath);  
  288.             }  
  289.             catch  
  290.             {  
  291.                 return null;  
  292.             }  
  293.         }  
  294.   
  295.         /// <summary>  
  296.         /// 獲取指定目錄及子目錄中所有子目錄列表  
  297.         /// </summary>  
  298.         /// <param name="directoryPath">指定目錄的絕對路徑</param>  
  299.         /// <param name="searchPattern">模式字符串,"*"代表0或N個字符,"?"代表1個字符。  
  300.         /// 范例:"Log*.xml"表示搜索所有以Log開頭的Xml文件。</param>  
  301.         /// <param name="isSearchChild">是否搜索子目錄</param>  
  302.         public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild)  
  303.         {  
  304.             try  
  305.             {  
  306.                 return Directory.GetDirectories(directoryPath, searchPattern, isSearchChild ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);  
  307.             }  
  308.             catch  
  309.             {  
  310.                 throw null;  
  311.             }  
  312.         }  
  313.         #endregion  
  314.  
  315.         #region 向文本文件寫入內容  
  316.         /// <summary>  
  317.         /// 向文本文件中寫入內容  
  318.         /// </summary>  
  319.         /// <param name="filePath">文件的絕對路徑</param>  
  320.         /// <param name="content">寫入的內容</param>          
  321.         public static void WriteText(string filePath, string content)  
  322.         {  
  323.             //向文件寫入內容  
  324.             File.WriteAllText(filePath, content);  
  325.         }  
  326.         #endregion  
  327.  
  328.         #region 向文本文件的尾部追加內容  
  329.         /// <summary>  
  330.         /// 向文本文件的尾部追加內容  
  331.         /// </summary>  
  332.         /// <param name="filePath">文件的絕對路徑</param>  
  333.         /// <param name="content">寫入的內容</param>  
  334.         public static void AppendText(string filePath, string content)  
  335.         {  
  336.             File.AppendAllText(filePath, content);  
  337.         }  
  338.         #endregion  
  339.  
  340.         #region 將現有文件的內容復制到新文件中  
  341.         /// <summary>  
  342.         /// 將源文件的內容復制到目標文件中  
  343.         /// </summary>  
  344.         /// <param name="sourceFilePath">源文件的絕對路徑</param>  
  345.         /// <param name="destFilePath">目標文件的絕對路徑</param>  
  346.         public static void Copy(string sourceFilePath, string destFilePath)  
  347.         {  
  348.             File.Copy(sourceFilePath, destFilePath, true);  
  349.         }  
  350.         #endregion  
  351.  
  352.         #region 將文件移動到指定目錄  
  353.         /// <summary>  
  354.         /// 將文件移動到指定目錄  
  355.         /// </summary>  
  356.         /// <param name="sourceFilePath">需要移動的源文件的絕對路徑</param>  
  357.         /// <param name="descDirectoryPath">移動到的目錄的絕對路徑</param>  
  358.         public static void Move(string sourceFilePath, string descDirectoryPath)  
  359.         {  
  360.             //獲取源文件的名稱  
  361.             string sourceFileName = GetFileName(sourceFilePath);  
  362.   
  363.             if (IsExistDirectory(descDirectoryPath))  
  364.             {  
  365.                 //如果目標中存在同名文件,則刪除  
  366.                 if (IsExistFile(descDirectoryPath + "\\" + sourceFileName))  
  367.                 {  
  368.                     DeleteFile(descDirectoryPath + "\\" + sourceFileName);  
  369.                 }  
  370.                 //將文件移動到指定目錄  
  371.                 File.Move(sourceFilePath, descDirectoryPath + "\\" + sourceFileName);  
  372.             }  
  373.         }  
  374.         #endregion  
  375.  
  376.         #region 將流讀取到緩沖區中  
  377.         /// <summary>  
  378.         /// 將流讀取到緩沖區中  
  379.         /// </summary>  
  380.         /// <param name="stream">原始流</param>  
  381.         public static byte[] StreamToBytes(Stream stream)  
  382.         {  
  383.             try  
  384.             {  
  385.                 //創建緩沖區  
  386.                 byte[] buffer = new byte[stream.Length];  
  387.   
  388.                 //讀取流  
  389.                 stream.Read(buffer, 0, int.Parse(stream.Length.ToString()));  
  390.   
  391.                 //返回流  
  392.                 return buffer;  
  393.             }  
  394.             catch  
  395.             {  
  396.                 return null;  
  397.             }  
  398.             finally  
  399.             {  
  400.                 //關閉流  
  401.                 stream.Close();  
  402.             }  
  403.         }  
  404.         #endregion  
  405.  
  406.         #region 將文件讀取到緩沖區中  
  407.         /// <summary>  
  408.         /// 將文件讀取到緩沖區中  
  409.         /// </summary>  
  410.         /// <param name="filePath">文件的絕對路徑</param>  
  411.         public static byte[] FileToBytes(string filePath)  
  412.         {  
  413.             //獲取文件的大小   
  414.             int fileSize = GetFileSize(filePath);  
  415.   
  416.             //創建一個臨時緩沖區  
  417.             byte[] buffer = new byte[fileSize];  
  418.   
  419.             //創建一個文件流  
  420.             FileInfo fi = new FileInfo(filePath);  
  421.             FileStream fs = fi.Open(FileMode.Open);  
  422.   
  423.             try  
  424.             {  
  425.                 //將文件流讀入緩沖區  
  426.                 fs.Read(buffer, 0, fileSize);  
  427.   
  428.                 return buffer;  
  429.             }  
  430.             catch  
  431.             {  
  432.                 return null;  
  433.             }  
  434.             finally  
  435.             {  
  436.                 //關閉文件流  
  437.                 fs.Close();  
  438.             }  
  439.         }  
  440.         #endregion  
  441.  
  442.         #region 將文件讀取到字符串中  
  443.         /// <summary>  
  444.         /// 將文件讀取到字符串中  
  445.         /// </summary>  
  446.         /// <param name="filePath">文件的絕對路徑</param>  
  447.         public static string FileToString(string filePath)  
  448.         {  
  449.             return FileToString(filePath, Encoding.Default);  
  450.         }  
  451.         /// <summary>  
  452.         /// 將文件讀取到字符串中  
  453.         /// </summary>  
  454.         /// <param name="filePath">文件的絕對路徑</param>  
  455.         /// <param name="encoding">字符編碼</param>  
  456.         public static string FileToString(string filePath, Encoding encoding)  
  457.         {  
  458.             //創建流讀取器  
  459.             StreamReader reader = new StreamReader(filePath, encoding);  
  460.             try  
  461.             {  
  462.                 //讀取流  
  463.                 return reader.ReadToEnd();  
  464.             }  
  465.             catch  
  466.             {  
  467.                 return string.Empty;  
  468.             }  
  469.             finally  
  470.             {  
  471.                 //關閉流讀取器  
  472.                 reader.Close();  
  473.             }  
  474.         }  
  475.         #endregion  
  476.  
  477.         #region 從文件的絕對路徑中獲取文件名( 包含擴展名 )  
  478.         /// <summary>  
  479.         /// 從文件的絕對路徑中獲取文件名( 包含擴展名 )  
  480.         /// </summary>  
  481.         /// <param name="filePath">文件的絕對路徑</param>          
  482.         public static string GetFileName(string filePath)  
  483.         {  
  484.             //獲取文件的名稱  
  485.             FileInfo fi = new FileInfo(filePath);  
  486.             return fi.Name;  
  487.         }  
  488.         #endregion  
  489.  
  490.         #region 從文件的絕對路徑中獲取文件名( 不包含擴展名 )  
  491.         /// <summary>  
  492.         /// 從文件的絕對路徑中獲取文件名( 不包含擴展名 )  
  493.         /// </summary>  
  494.         /// <param name="filePath">文件的絕對路徑</param>          
  495.         public static string GetFileNameNoExtension(string filePath)  
  496.         {  
  497.             //獲取文件的名稱  
  498.             FileInfo fi = new FileInfo(filePath);  
  499.             return fi.Name.Split('.')[0];  
  500.         }  
  501.         #endregion  
  502.  
  503.         #region 從文件的絕對路徑中獲取擴展名  
  504.         /// <summary>  
  505.         /// 從文件的絕對路徑中獲取擴展名  
  506.         /// </summary>  
  507.         /// <param name="filePath">文件的絕對路徑</param>          
  508.         public static string GetExtension(string filePath)  
  509.         {  
  510.             //獲取文件的名稱  
  511.             FileInfo fi = new FileInfo(filePath);  
  512.             return fi.Extension;  
  513.         }  
  514.         #endregion  
  515.  
  516.         #region 清空指定目錄  
  517.         /// <summary>  
  518.         /// 清空指定目錄下所有文件及子目錄,但該目錄依然保存.  
  519.         /// </summary>  
  520.         /// <param name="directoryPath">指定目錄的絕對路徑</param>  
  521.         public static void ClearDirectory(string directoryPath)  
  522.         {  
  523.             if (IsExistDirectory(directoryPath))  
  524.             {  
  525.                 //刪除目錄中所有的文件  
  526.                 string[] fileNames = GetFileNames(directoryPath);  
  527.                 foreach (string t in fileNames)  
  528.                 {  
  529.                     DeleteFile(t);  
  530.                 }  
  531.   
  532.                 //刪除目錄中所有的子目錄  
  533.                 string[] directoryNames = GetDirectories(directoryPath);  
  534.                 foreach (string t in directoryNames)  
  535.                 {  
  536.                     DeleteDirectory(t);  
  537.                 }  
  538.             }  
  539.         }  
  540.         #endregion  
  541.  
  542.         #region 清空文件內容  
  543.         /// <summary>  
  544.         /// 清空文件內容  
  545.         /// </summary>  
  546.         /// <param name="filePath">文件的絕對路徑</param>  
  547.         public static void ClearFile(string filePath)  
  548.         {  
  549.             //刪除文件  
  550.             File.Delete(filePath);  
  551.   
  552.             //重新創建該文件  
  553.             CreateFile(filePath);  
  554.         }  
  555.         #endregion  
  556.  
  557.         #region 刪除指定文件  
  558.         /// <summary>  
  559.         /// 刪除指定文件  
  560.         /// </summary>  
  561.         /// <param name="filePath">文件的絕對路徑</param>  
  562.         public static void DeleteFile(string filePath)  
  563.         {  
  564.             if (IsExistFile(filePath))  
  565.             {  
  566.                 File.Delete(filePath);  
  567.             }  
  568.         }  
  569.         #endregion  
  570.  
  571.         #region 刪除指定目錄  
  572.         /// <summary>  
  573.         /// 刪除指定目錄及其所有子目錄  
  574.         /// </summary>  
  575.         /// <param name="directoryPath">指定目錄的絕對路徑</param>  
  576.         public static void DeleteDirectory(string directoryPath)  
  577.         {  
  578.             if (IsExistDirectory(directoryPath))  
  579.             {  
  580.                 Directory.Delete(directoryPath, true);  
  581.             }  
  582.         }  
  583.         #endregion  
  584.  
  585.         #region 記錄錯誤日志到文件方法  
  586.         /// <summary>  
  587.         /// 記錄錯誤日志到文件方法  
  588.         /// </summary>  
  589.         /// <param name="exMessage"></param>  
  590.         /// <param name="exMethod"></param>  
  591.         /// <param name="userID"></param>  
  592.         public static void ErrorLog(string exMessage, string exMethod, int userID)  
  593.         {  
  594.             try  
  595.             {  
  596.                 string errVir = "/Log/Error/" + DateTime.Now.ToShortDateString() + ".txt";  
  597.                 string errPath = System.Web.HttpContext.Current.Server.MapPath(errVir);  
  598.                 File.AppendAllText(errPath,  
  599.                                    "{userID:" + userID + ",exMedthod:" + exMethod + ",exMessage:" + exMessage + "}");  
  600.             }  
  601.             catch  
  602.             {  
  603.   
  604.             }  
  605.         }  
  606.         #endregion  
  607.  
  608.         #region 輸出調試日志  
  609.         /// <summary>  
  610.         /// 輸出調試日志  
  611.         /// </summary>  
  612.         /// <param name="factValue">實際值</param>   
  613.         /// <param name="expectValue">預期值</param>  
  614.         public static void OutDebugLog(object factValue, object expectValue = null)  
  615.         {  
  616.             string errPath = System.Web.HttpContext.Current.Server.MapPath(string.Format("/Log/Debug/{0}.html", DateTime.Now.ToShortDateString()));  
  617.             if (!Equals(expectValue, null))  
  618.                 File.AppendAllLines(errPath,  
  619.                                    new[]{string.Format(  
  620.                                        "【{0}】[{3}] 實際值:<span style='color:blue;'>{1}</span> 預期值: <span style='color:gray;'>{2}</span><br/>",  
  621.                                        DateTime.Now.ToShortTimeString()  
  622.                                        , factValue, expectValue, Equals(expectValue, factValue)  
  623.                                            ? "<span style='color:green;'>成功</span>"  
  624.                                            : "<span style='color:red;'>失敗</span>")});  
  625.             else  
  626.                 File.AppendAllLines(errPath, new[]{  
  627.                                string.Format(  
  628.                                    "【{0}】[{3}] 實際值:<span style='color:blue;'>{1}</span> 預期值: <span style='color:gray;'>{2}</span><br/>",  
  629.                                    DateTime.Now.ToShortTimeString()  
  630.                                    , factValue, "空", "<span style='color:green;'>成功</span>")});  
  631.         }  
  632.         #endregion  
  633.     }  
  634. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM