一、獲取文件夾列表 /// /// 獲取文件夾下的文件列表 /// /// string Path:文件夾路徑(@"C:\") /// string SearchPattern:擴展名過濾(" .txt") /// bool SearchChild:為False不搜索子目錄,為True搜索子目錄 / ...
一、獲取文件夾列表
/// <summary>
/// 獲取文件夾下的文件列表
/// </summary>
/// <param name="Path">string Path:文件夾路徑(@"C:\")</param>
/// <param name="SearchPattern">string SearchPattern:擴展名過濾("*.txt")</param>
/// <param name="SearchChild">bool SearchChild:為False不搜索子目錄,為True搜索子目錄</param>
/// <returns></returns>
public string[] GetFileList(string Path, string SearchPattern, bool SearchChild)
{
//判斷文件夾是否存在
if (Directory.Exists(Path)==false)
{
return null;
}
if (SearchChild){
//搜索子目錄
return Directory.GetFiles(Path, SearchPattern, SearchOption.AllDirectories);
}
else
{
//不搜索子目錄
return Directory.GetFiles(Path, SearchPattern, SearchOption.TopDirectoryOnly);
}
}
二、打開文件
/// <summary>
/// 打開文件
/// </summary>
/// <param name="Path">string Path:文件路徑</param>
/// <returns></returns>
public System.Diagnostics.Process OpenFile(string Path)
{
if (File.Exists(Path) == true)
{//打開文件,預設用系統註冊類型關聯軟體打開
return System.Diagnostics.Process.Start(Path);
}
else
{
return null;
}
}
*可對打開的文件進行一些操作:
public System.Diagnostics.Process p1;
p1=OpenFile(@"c:\1.txt");
p1..Kill();//關閉打開的文件
p1.WaitForExit();//等待打開的文件關閉
p1.MainWindowTitle;//獲取打開文件主視窗的標題
p1.HasExited;//判斷打開的文件是否已關閉
三、獲取文件信息
/// <summary>
/// 獲取文件信息
/// </summary>
/// <param name="Path">string Path:文件路徑</param>
/// <returns></returns>
public FileInfo GetFileInfo(string Path)
{
if (File.Exists(Path) == true)
{
return new FileInfo(Path);
}
else
{
return null;
}
}
*使用方法如下:
FileInfo fi1 = GetFileInfo(@"f:\1.txt");
fi1.Extension;//獲取文件的擴展名
fi1.DirectoryName;//獲取文件所在完整目錄
fi1.Length;//獲取文件的位元組數
fi1.Name;//獲取文件名,包括擴展名
fi1.Name.Replace(f1.Extension, "");//獲取文件名,不包括擴展名
四、創建文件夾
/// <summary>
/// 創建文件夾
/// </summary>
/// <param name="Path">string Path:文件夾路徑</param>
/// <returns></returns>
public bool CreateDir(string Path)
{
try
{//判斷文件夾是否存在
if (Directory.Exists(Path) == false)
{
Directory.CreateDirectory(Path);
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
五、用二進位數組生成文件
///
/// 用二進位數組Byte[]生成文件
///
/// string Path:要生成的文件全路徑
/// byte[] StreamByte:要生成文件的二進位 Byte 數組
///
public bool ByteStreamToFile(string Path, byte[] StreamByte)
{
try
{//判斷要創建的文件是否存在,若存在則先刪除
if (File.Exists(Path) == true)
{
File.Delete(Path);
}
//創建文件流(打開或創建的方式)
FileStream FS = new FileStream(Path, FileMode.OpenOrCreate);
//把文件流寫到文件中
FS.Write(StreamByte, 0, StreamByte.Length);
FS.Close();
return true;
}
catch
{
return false;
}
}
六、獲取系統文件夾
Environment.GetFolderPath(Environment.SpecialFolder.Startup)
說明:
ApplicationData 目錄,它用作當前漫游用戶的應用程式特定數據的公共儲存庫。
CommonApplicationData 目錄,它用作所有用戶使用的應用程式特定數據的公共儲存庫。
CommonProgramFiles 用於應用程式間共用的組件的目錄。
Cookies 用作 Internet Cookie 的公共儲存庫的目錄。
Desktop 邏輯桌面,而不是物理文件系統位置。
DesktopDirectory 用於物理上存儲桌面上的文件對象的目錄。
Favorites 用作用戶收藏夾項的公共儲存庫的目錄。
History 用作 Internet 歷史記錄項的公共儲存庫的目錄。
InternetCache 用作 Internet 臨時文件的公共儲存庫的目錄。
LocalApplicationData 目錄,它用作當前非漫游用戶使用的應用程式特定數據的公共儲存庫。
MyComputer “我的電腦”文件夾。
MyMusic “My Music”文件夾。
MyPictures “My Pictures”文件夾。
Personal 用作文檔的公共儲存庫的目錄。
ProgramFiles “Program files”目錄。
Programs 包含用戶程式組的目錄。
Recent 包含用戶最近使用過的文檔的目錄。
SendTo 包含“發送”菜單項的目錄。
StartMenu 包含“開始”菜單項的目錄。
Startup 對應於用戶的“啟動”程式組的目錄。
System “System”目錄。
Templates 用作文檔模板的公共儲存庫的目錄。
-------------------------------------------------------------------------------
文件流操作 之 刪除、複製、轉移多個文件
string[] format = { ".jpg", ".doc", ".exe", ".pdf", "*.xls" };
- 03.# 文件流操作 之 刪除、複製、轉移多個文件
/// <summary>
/// 刪除文件夾下麵所有圖片
/// </summary>
/// <param name="oldpngPath">待刪除文件路徑</param>
/// <param name="newpngPath">刪除到的新目錄</param>
/// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param>
public void deleteAll(string delpath, string format )
{
string[] files = Directory.GetFiles(delpath, format[0]);
foreach (string file in files)
{
File.Delete(file);
}
}
/// <summary>
/// 複製文件夾下麵所有圖片
/// </summary>
/// <param name="oldpngPath">待複製文件路徑</param>
/// <param name="newpngPath">複製到的新目錄</param>
/// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param>
public void copyALl(string oldpngPath, string newpngPath, string format )
{
string[] files = Directory.GetFiles(oldpngPath, format[0]);
foreach (string file in files)
{
string otherFile = Path.Combine(oldpngPath, Path.GetFileName(file));
File.Copy(file, newpngPath + "\\" + Path.GetFileName(file));
}
}
/// <summary>
/// 移動文件夾下的所有文件
/// </summary>
/// <param name="olderpath">待移動的文件目錄</param>
/// <param name="topath">新目錄</param>
public void moveAll(string olderpath, string topath)
{
string[] files = Directory.GetFiles(delpath, format[0]);
foreach (string file in files)
{
File.Move(file, topath); //移動文件
}
}
目錄操作
string[] drives = Directory.GetLogicalDrives(); //本地驅動器的名,如:C:\等
string path = Directory.GetCurrentDirectory(); //獲取應用程式的當前工作目錄
Path.GetFileName(@"c:\dir\file.txt"); //獲取子目錄的名字,result的結果是file.txt
Directory.GetFiles(路徑及文件名) //獲取指定目錄中的文件名(文件列表)
DirectoryInfo di = new DirectoryInfo(@"f:\MyDir"); //構造函數創建目錄
DirectoryInfo di=Directory.CreateDirectory(@"f:\bbs"); //創建對象並創建目錄
if (di.Exists == false) //檢查是否存在此目錄
{ di.Create(); } //創建目錄
DirectoryInfo dis = di.CreateSubdirectory("SubDir"); //以相對路徑創建子目錄
dis.Delete(true); //刪除剛創建的子目錄
di.Delete(true); //刪除創建目錄
文件操作:
Directory.Delete(@"f:\bbs2", true); //刪除目錄及其子目錄和內容(如為假不能刪除有內容的目錄包括子目錄)
Directory.GetDirectories 方法 //獲取指定目錄中子目錄的名稱
string[] dirs = Directory.GetDirectories(@"f:", "b*"); Console.WriteLine("此目錄中以b開頭的子目錄共{0}個!", dirs.Length);
foreach (string dir in dirs) { Console.WriteLine(dir); }
Directory.GetFileSystemEntries //獲取指定目錄中的目錄及文件名
Directory.GetLogicalDrives //檢索此電腦上格式為“<驅動器號>:\”的邏輯驅動器的名稱,【語法同上】
Directory.GetParent //用於檢索父目錄的路徑。
DirectoryInfo a = Directory.GetParent(path);
Console.WriteLine(a.FullName);
Directory.Move //移動目錄及其在內的所有文件
Directory.Move(@"f:\bbs\1", @"f:\bbs\2"); //將文件夾1內的文件剪到文件夾2內 文件夾2是剛創建的(即在程式執行的時候,文件夾2是不存在的)
文件流操作
// 對位元組的讀寫操作(包含對非同步操作的支持) Reading Writing Seeking
BinaryReader和BinaryWriter // 從字元串或原始數據到各種流之間的讀寫操作
FileStream類通過Seek()方法進行對文件的隨機訪問,預設為同步
TextReader和TextWriter //用於gb2312字元的輸入和輸出
StringReader和StringWriter //在字元串中讀寫字元
StreamReader和StreamWriter //在流中讀寫字元
BufferedStream 為諸如網路流的其它流添加緩衝的一種流類型.
MemoryStream 無緩衝的流
NetworkStream 互聯網路上的流
編碼轉換
Encoding e1 = Encoding.Default; //取得本頁預設代碼
Byte[] bytes = e1.GetBytes("中國人民解放軍"); //轉為二進位
string str = Encoding.GetEncoding("UTF-8").GetString(bytes); //轉回UTF-8編碼
string srcFileName = @"D:/a.txt";
string destFileName = @"D:/b.txt";
string srcFolderPath = @"D:/1";
string destFolderPath = @"D:/6";
//方法一
if (System.IO.File.Exists(srcFileName))
{
System.IO.File.Move(srcFileName, destFileName);
}
if (System.IO.Directory.Exists(srcFolderPath))
{
System.IO.Directory.Move(srcFolderPath, destFolderPath);
}
//方法二
if (System.IO.File.Exists(srcFileName))
{
System.IO.FileInfo file = new System.IO.FileInfo(srcFileName);
file.MoveTo(destFileName);
}
if (System.IO.Directory.Exists(srcFolderPath))
{
System.IO.DirectoryInfo folder = new System.IO.DirectoryInfo(srcFolderPath);
folder.MoveTo(destFolderPath);
C# 重命名本地硬碟的文件名
1.先在項目中添加引用:Microsoft.VisualBasic
然後在所需使用的文檔中加上using Microsoft.VisualBasic.Devices; 命名空間
2.就下麵兩行
Computer MyComputer = new Computer();
MyComputer.FileSystem.RenameFile(FileName, newFileName);
其中FileName是你所要重命名的文件的全路徑,newFileName僅僅是目標文件名;
創建文件夾:
要實現的功能:在IIS伺服器上創建文件夾,用來存放工廠生產的數據,文件夾目錄按照UserData/DCCFile/year/mounth/filename的方式創建。當用戶存文件的時候查找是否存在此文件夾,不存在的時候則先創建文件夾,然後進行上傳文件。
實現邏輯:預先設定一個虛擬路徑,用server.mappath()將文件要存放的相對路徑映射到絕對路徑,然後用Directory類在絕對路徑中創建文件夾,然後將文件上傳到此絕對路徑中。
實現代碼:
string stryear = System.DateTime.Now.Year.ToString();
string strmonth = System.DateTime.Now.Month.ToString();
string path = Server.MapPath("~/UserData/DCCFile/"+stryear+"/"+strmonth+"/");//文件要上傳到的虛擬路徑
//path為經過映射的在本地磁碟上的絕對路徑
if (!Directory.Exists(path))//判斷這個絕對路徑是否存在
{
Directory.CreateDirectory(path); //不存在文件夾時則創建文件夾
}
FileUpload1.SaveAs(path+FileUpload1.FileName);//上傳新文件
string filename="文件名";
string serverpath = System.Web.HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/UserData/DCCFile/" + stryear + "/" + strmonth + "/" + strSysFileNumber + "/");//MeThod1:從ISS伺服器映射文件的絕對路徑
string serverpath=Server.MapPath("~/UserData/DCCFile/" + stryear + "/" + strmonth + "/" + strSysFileNumber + "/");//MeThod2:從ISS伺服器映射文件的絕對路徑
string fileFullName = serverpath + filename;//文件的全名
FileInfo file = new FileInfo(fileFullName);
if (File.Exists(fileFullName))
{
//將文件下載到客戶機
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(file.Name));
Response.ContentType = "application/octet-stream";
Response.Filter.Close(); //Response.Filter 是一個 Stream 對象(表示位元組序列的流),Response.Filter.CLose() 表示關閉此流對象並釋放相關資源。
Response.WriteFile(file.FullName);
Response.End();
}
else
{
Page.ClientScript.RegisterStartupScript(GetType(), "alert", "<script language='javascript'>alert('下載失敗!')</script>");
}
說明:application/octet-stream 是一種MIME類型,表示可以實現任何格式的文件下載
Content-disposition 是 MIME 協議的擴展,MIME 協議指示 MIME 用戶代理如何顯示附加的文件。
我們在開發web系統時有時會有以下需求:
希望某類或者某已知MIME 類型的文件(比如:.gif;.txt;*.htm)能夠在訪問時彈出“文件下載”對話框
希望以原始文件名(上傳時的文件名,例如:山東省政府1024號文件.doc)提供下載,但伺服器上保存的地址卻是其他文件名(如12519810948091234_asdf.doc)
希望某文件直接在瀏覽器上顯示而不是彈出文件下載對話框
解決辦法是 Response.AddHeader "content-disposition","attachment; filename=fname.ext"
將上述需求進行歸我給出如下例子代碼:
public static void ToDownload(string serverfilpath,string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename="" + UTF_FileName(filename) + "";");
////attachment --- 作為附件下載
////inline --- 線上打開
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}
private static string UTF_FileName(string filename)
{
return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
}
UTF_FileName方法 主要為瞭解決包含非英文/數字名稱的問題,比如說文件名為“衣明志.doc”,使用該方法客戶端就不會出現 亂碼了。作用同上面的Server.UrlEncode