一、獲取本地指定文夾下所有文件名稱和路徑
//DirectoryInfo theFolder = new DirectoryInfo(unzipPath);
//DirectoryInfo[] dirInfo = theFolder.GetDirectories();
//獲取要處理文件夾下的所有文件
private void GetAllFile(string foldPath)
{
if (foldPath.Length > 0)
{
string[] dir = Directory.GetDirectories(foldPath); //文件夾列表
DirectoryInfo fdir = new DirectoryInfo(foldPath);
FileInfo[] file = fdir.GetFiles();
if (file.Length != 0 || dir.Length != 0) //當前目錄文件或文件夾不為空
{
foreach (FileInfo f in file) //顯示當前目錄所有文件
{
listFile.Add(f.Name, f.FullName);
}
foreach (string d in dir)
{
GetAllFile(d);//遞歸
}
}
}
}
二稼锅、根據(jù)文件完整路徑獲取數(shù)據(jù)
string filePath = "C:\JiYF\BenXH\BenXHCMS.xml";
string str = "獲取文件的全路徑:" + Path.GetFullPath(filePath); //-->C:\JiYF\BenXH\BenXHCMS.xml
str = "獲取文件所在的目錄:" + Path.GetDirectoryName(filePath); //-->C:\JiYF\BenXH
str = "獲取文件的名稱含有后綴:" + Path.GetFileName(filePath); //-->BenXHCMS.xml
str = "獲取文件的名稱沒有后綴:" + Path.GetFileNameWithoutExtension(filePath); //-->BenXHCMS
str = "獲取路徑的后綴擴展名稱:" + Path.GetExtension(filePath); //-->.xml
str = "獲取路徑的根目錄:" + Path.GetPathRoot(filePath); //-->C:
string strTempPath = System.Environment.GetEnvironmentVariable("TEMP");//系統(tǒng)臨時目錄路徑
三狞换、C#中得到程序當前工作目錄和執(zhí)行目錄的五種方法
string str="";
1祷杈、str += "\r\n" + System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;//?獲取模塊的完整路徑诉字。
2孤里、str += "\r\n" + System.Environment.CurrentDirectory;//?獲取和設置當前目錄(該進程從中啟動的目錄)的完全限定目錄黄选。
3蝇摸、str += "\r\n" + System.IO.Directory.GetCurrentDirectory();?//獲取應用程序的當前工作目錄。
4办陷、str += "\r\n" + System.AppDomain.CurrentDomain.BaseDirectory;//獲取程序的基目錄貌夕。確認這種方法在 windows服務中是可以用的
5、str += "\r\n" + System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//獲取和設置包括該應用程序的目錄的名稱民镜。
6啡专、str += "\r\n" + System.Windows.Forms.Application.StartupPath;?//獲取啟動了應用程序的可執(zhí)行文件的路徑。效果和2制圈、5一樣们童。只是5返回的字符串后面多了一個""而已
7、str += "\r\n" + System.Windows.Forms.Application.ExecutablePath;//獲取啟動了應用程序的可執(zhí)行文件的路徑及文件名鲸鹦,效果有時和1一樣慧库。
Console.Write(str);
Console.ReadKey();
得到結(jié)果:
1、D:\CPTBSS\Program\CPTCP\bin\Debug\CPTCP.exe
2亥鬓、D:\CPTBSS\Program\CPTCP\bin\Debug
3完沪、D:\CPTBSS\Program\CPTCP\bin\Debug
4、D:\CPTBSS\Program\CPTCP\bin\Debug
5、D:\CPTBSS\Program\CPTCP\bin\Debug
6覆积、D:\CPTBSS\Program\CPTCP\bin\Debug
7听皿、D:\CPTBSS\Program\CPTCP\bin\Debug\CPTCP.exe
四、C#比較兩個文件是否相同:
public static bool isValidFileContent(string filePath1, string filePath2)
{
//創(chuàng)建一個哈希算法對象
using (HashAlgorithm hash = HashAlgorithm.Create())
{
using (FileStream file1 = new FileStream(filePath1, FileMode.Open),file2=new FileStream(filePath2,FileMode.Open))
{
byte[] hashByte1 = hash.ComputeHash(file1);//哈希算法根據(jù)文本得到哈希碼的字節(jié)數(shù)組
byte[] hashByte2 = hash.ComputeHash(file2);
string str1 = BitConverter.ToString(hashByte1);//將字節(jié)數(shù)組裝換為字符串
string str2 = BitConverter.ToString(hashByte2);
return (str1==str2);//比較哈希碼
}
}
}
五宽档、C#刪除文件和文件夾
刪除到回收站
首先對項目添加名為Microsoft.VisualBasic.dll的引用尉姨,然后添加命名空間
using Microsoft.VisualBasic.FileIO;
FileSystem.DeleteFile(filepath,UIOption.OnlyErrorDialogs,RecycleOption.SendToRecycleBin)
徹底刪除
/// <param name="directoryPath"> 文件夾路徑 </param>
/// <param name="fileName"> 文件名稱 </param>
public static void DeleteDirectory(string directoryPath, string fileName)
{
//刪除文件
for (int i = 0; i < Directory.GetFiles(directoryPath).ToList().Count; i++)
{
if (Directory.GetFiles(directoryPath)[i] == fileName)
{
File.Delete(fileName);
}
//刪除文件夾
for (int i = 0; i < Directory.GetDirectories(directoryPath).ToList().Count; i++)
{
if (Directory.GetDirectories(directoryPath)[i] == fileName)
{
Directory.Delete(fileName, true);
}
}
}
}
六、創(chuàng)建文件夾
if (!Directory.Exists(dir))//如果不存在就創(chuàng)建 dir 文件夾
{
Directory.CreateDirectory(dir);
}
打開指定文件夾System.Diagnostics.Process.Start("explorer.exe", newFilePath);
七吗冤、文件屬性操作
去除文件的只讀屬性:System.IO.File.SetAttributes(filePath, System.IO.FileAttributes.Normal);
八又厉、以管理員身份啟動應用程序
//獲得當前登錄的Windows用戶標示
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
//創(chuàng)建Windows用戶主題
Application.EnableVisualStyles();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
//判斷當前登錄用戶是否為管理員
if (!principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
{
//創(chuàng)建啟動對象
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
//設置運行文件
startInfo.FileName = System.Windows.Forms.Application.ExecutablePath;
//設置啟動動作,確保以管理員身份運行
startInfo.Verb = "runas";
//如果不是管理員,則啟動UAC
System.Diagnostics.Process.Start(startInfo);
//退出
System.Windows.Forms.Application.Exit();
return;
}
九椎瘟、文件占用檢測處理
//14位Utc時間戳轉(zhuǎn)日期格式
public DateTime GetDatetime(string strDate)
{
DateTime strTime = DateTime.Now;
if (strDate.Length == 14)
{
strDate = strDate.Substring(0, 4) + "-" + strDate.Substring(4, 2) + "-" + strDate.Substring(6, 2) + " " + strDate.Substring(8, 2) + ":" + strDate.Substring(10, 2) + ":" + strDate.Substring(12, 2);
strTime = Convert.ToDateTime(strDate).AddHours(8);
}
return strTime;
}
//檢查文件是否被占用
public bool IsFileInUse(string fileName)
{
bool inUse = true;
FileStream fs = null;
if (!File.Exists(fileName))
{
inUse = false;
}
else
{
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None);
inUse = false;
}
catch
{
}
finally
{
if (fs != null)
fs.Close();
}
}
return inUse;//true表示正在使用,false沒有使用
}
//檢查應用程序是否被占用
public bool IsAppInUse(string fileName)
{
Process[] p = System.Diagnostics.Process.GetProcessesByName(fileName);
if (p.Length > 0)
{
return true;
}
else
{
return false;
}
}
//解除應用程序占用
public bool CompleColse(string fileName)
{
try
{
foreach (Process p in System.Diagnostics.Process.GetProcessesByName(fileName))
{
p.Kill();
p.WaitForExit();
}
return true;
}
catch
{
return false;
}
}
十覆致、Copy一個文件到另一個文件夾下
public static void CopyToFile()
{
//源文件路徑
string sourceName = @"D:\Source\Test.txt";
//目標路徑:項目下的NewTest文件夾,(如果沒有就創(chuàng)建該文件夾)
string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "NewTest");
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
//文件不用新的文件名,就用原文件文件名
string fileName = Path.GetFileName(sourceName);
////可以選擇給文件換個新名字
//string fileName = string.Format("{0}.{1}", "newFileText", "txt");
//目標整體路徑
string targetPath = Path.Combine(folderPath, fileName);
//Copy到新文件下
FileInfo file = new FileInfo(sourceName);
if (file.Exists)
{
//true 覆蓋已存在的同名文件肺蔚,false不覆蓋
file.CopyTo(targetPath, true);
}
}