[C#]共通ツールクラス——ファイル操作クラス
23624 ワード
/// <para> FilesUpload: :ASP.NET </para>
/// <para> FileExists: </para>
/// <para> IsImgFilename: </para>
/// <para> CopyFiles: </para>
/// <para> MoveFiles: </para>
/// <para> DeleteDirectoryFiles: </para>
/// <para> DeleteFiles: </para>
/// <para> CreateDirectory: </para>
/// <para> CreateDirectory: </para>
/// <para> ReNameFloder: </para>
/// <para> DeleteDirectory: </para>
/// <para> DirectoryIsExists: [+2 ]</para>
/// <para> DeleteSubDirectory: , </para>
/// <para> GetFileWriteTime: </para>
/// <para> GetFileExtension: </para>
/// <para> IsHiddenFile: </para>
/// <para> ReadTxtFile: </para>
/// <para> WriteStrToTxtFile: ( path , )</para>
/// <para> GetLocalDrives: </para>
/// <para> GetAppCurrentDirectory: </para>
/// <para> GetFileSize: B,KB,GB,TB [+2 ]</para>
/// <para> DownLoadFiles: </para>
view sourceprint?
using System;
using System.Configuration;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.Security;
using System.IO;
using System.IO.Compression;
using System.Xml;
using System.Diagnostics;
using System.Windows.Forms;
using System.Threading;
namespace Utils
{
/// <summary>
/// <para> </para>
/// ——
/// <para> ---------------------------------------------------------------------------------------</para>
/// <para> FilesUpload: :ASP.NET </para>
/// <para> FileExists: </para>
/// <para> IsImgFilename: </para>
/// <para> CopyFiles: </para>
/// <para> MoveFiles: </para>
/// <para> DeleteDirectoryFiles: </para>
/// <para> DeleteFiles: </para>
/// <para> CreateDirectory: </para>
/// <para> CreateDirectory: </para>
/// <para> ReNameFloder: </para>
/// <para> DeleteDirectory: </para>
/// <para> DirectoryIsExists: [+2 ]</para>
/// <para> DeleteSubDirectory: , </para>
/// <para> GetFileWriteTime: </para>
/// <para> GetFileExtension: </para>
/// <para> IsHiddenFile: </para>
/// <para> ReadTxtFile: </para>
/// <para> WriteStrToTxtFile: ( path , )</para>
/// <para> GetLocalDrives: </para>
/// <para> GetAppCurrentDirectory: </para>
/// <para> GetFileSize: B,KB,GB,TB [+2 ]</para>
/// <para> DownLoadFiles: </para>
/// </summary>
public class FilesHelper
{
private const string PATH_SPLIT_CHAR = "\\";
#region :ASP.NET
/// <summary>
/// :
/// </summary>
/// <param name="myFileUpload"> ID</param>
/// <param name="allowExtensions"> , :string[] allowExtensions = { ".doc", ".xls", ".ppt", ".jpg", ".gif" };</param>
/// <param name="maxLength"> , M </param>
/// <param name="savePath"> , , :Server.MapPath("~/upload/");</param>
/// <param name="saveName"> , "" </param>
public static void FilesUpload(FileUpload myFileUpload, string[] allowExtensions, int maxLength, string savePath, string saveName)
{
//
bool fileAllow = false;
//
if (myFileUpload.HasFile)
{
// , ContentLength , M 2 1024
if (myFileUpload.PostedFile.ContentLength / 1024 / 1024 >= maxLength)
{
throw new Exception(" 2M !");
}
// ,
string fileExtension = System.IO.Path.GetExtension(myFileUpload.FileName).ToLower();
string tmp = ""; //
//
for (int i = 0; i < allowExtensions.Length; i++)
{
tmp += i == allowExtensions.Length - 1 ? allowExtensions[i] : allowExtensions[i] + ",";
if (fileExtension == allowExtensions[i])
{
fileAllow = true;
}
}
if (fileAllow)
{
try
{
string path = savePath + (saveName == "" ? myFileUpload.FileName : saveName);
//
myFileUpload.SaveAs(path);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
else
{
throw new Exception(" , :" + tmp);
}
}
else
{
throw new Exception(" !");
}
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="filename"> </param>
/// <returns> </returns>
public static bool FileExists(string filename)
{
return System.IO.File.Exists(filename);
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="filename"> </param>
/// <returns> </returns>
public static bool IsImgFilename(string filename)
{
filename = filename.Trim();
if (filename.EndsWith(".") || filename.IndexOf(".") == -1)
{
return false;
}
string extname = filename.Substring(filename.LastIndexOf(".") + 1).ToLower();
return (extname == "jpg" || extname == "jpeg" || extname == "png" || extname == "bmp" || extname == "gif");
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="sourceDir"> </param>
/// <param name="targetDir"> </param>
/// <param name="overWrite"> true, , </param>
/// <param name="copySubDir"> true, , </param>
public static void CopyFiles(string sourceDir, string targetDir, bool overWrite, bool copySubDir)
{
//
foreach (string sourceFileName in Directory.GetFiles(sourceDir))
{
string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR) + 1));
if (File.Exists(targetFileName))
{
if (overWrite == true)
{
File.SetAttributes(targetFileName, FileAttributes.Normal);
File.Copy(sourceFileName, targetFileName, overWrite);
}
}
else
{
File.Copy(sourceFileName, targetFileName, overWrite);
}
}
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="sourceDir"> </param>
/// <param name="targetDir"> </param>
/// <param name="overWrite"> true, , </param>
/// <param name="moveSubDir"> true, , </param>
public static void MoveFiles(string sourceDir, string targetDir, bool overWrite, bool moveSubDir)
{
//
foreach (string sourceFileName in Directory.GetFiles(sourceDir))
{
string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR) + 1));
if (File.Exists(targetFileName))
{
if (overWrite == true)
{
File.SetAttributes(targetFileName, FileAttributes.Normal);
File.Delete(targetFileName);
File.Move(sourceFileName, targetFileName);
}
}
else
{
File.Move(sourceFileName, targetFileName);
}
}
if (moveSubDir)
{
foreach (string sourceSubDir in Directory.GetDirectories(sourceDir))
{
string targetSubDir = Path.Combine(targetDir, sourceSubDir.Substring(sourceSubDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
if (!Directory.Exists(targetSubDir))
Directory.CreateDirectory(targetSubDir);
MoveFiles(sourceSubDir, targetSubDir, overWrite, true);
Directory.Delete(sourceSubDir);
}
}
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="TargetDir"> </param>
/// <param name="delSubDir"> true, </param>
public static void DeleteDirectoryFiles(string TargetDir, bool delSubDir)
{
foreach (string fileName in Directory.GetFiles(TargetDir))
{
File.SetAttributes(fileName, FileAttributes.Normal);
File.Delete(fileName);
}
if (delSubDir)
{
DirectoryInfo dir = new DirectoryInfo(TargetDir);
foreach (DirectoryInfo subDi in dir.GetDirectories())
{
DeleteDirectoryFiles(subDi.FullName, true);
subDi.Delete();
}
}
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="TargetFileDir"> </param>
public static void DeleteFiles(string TargetFileDir)
{
File.Delete(TargetFileDir);
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="targetDir"></param>
public static void CreateDirectory(string targetDir)
{
DirectoryInfo dir = new DirectoryInfo(targetDir);
if (!dir.Exists)
dir.Create();
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="parentDir"> </param>
/// <param name="subDirName"> </param>
public static void CreateDirectory(string parentDir, string subDirName)
{
CreateDirectory(parentDir + PATH_SPLIT_CHAR + subDirName);
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="OldFloderName"> </param>
/// <param name="NewFloderName"> </param>
/// <returns></returns>
public static bool ReNameFloder(string OldFloderName, string NewFloderName)
{
try
{
if (Directory.Exists(HttpContext.Current.Server.MapPath("//") + OldFloderName))
{
Directory.Move(HttpContext.Current.Server.MapPath("//") + OldFloderName, HttpContext.Current.Server.MapPath("//") + NewFloderName);
}
return true;
}
catch
{
return false;
}
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="targetDir"> </param>
public static void DeleteDirectory(string targetDir)
{
DirectoryInfo dirInfo = new DirectoryInfo(targetDir);
if (dirInfo.Exists)
{
DeleteDirectoryFiles(targetDir, true);
dirInfo.Delete(true);
}
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="StrPath"> </param>
/// <returns></returns>
public static bool DirectoryIsExists(string StrPath)
{
DirectoryInfo dirInfo = new DirectoryInfo(StrPath);
return dirInfo.Exists;
}
/// <summary>
///
/// </summary>
/// <param name="StrPath"> </param>
/// <param name="Create"> , </param>
public static void DirectoryIsExists(string StrPath, bool Create)
{
DirectoryInfo dirInfo = new DirectoryInfo(StrPath);
//return dirInfo.Exists;
if (!dirInfo.Exists)
{
if (Create) dirInfo.Create();
}
}
#endregion
#region ,
/// <summary>
/// ,
/// </summary>
/// <param name="targetDir"> </param>
public static void DeleteSubDirectory(string targetDir)
{
foreach (string subDir in Directory.GetDirectories(targetDir))
{
DeleteDirectory(subDir);
}
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="FileUrl"> </param>
/// <returns></returns>
public DateTime GetFileWriteTime(string FileUrl)
{
return File.GetLastWriteTime(FileUrl);
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="PathFileName"> </param>
/// <returns></returns>
public string GetFileExtension(string PathFileName)
{
return Path.GetExtension(PathFileName);
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="path"> </param>
/// <returns></returns>
public bool IsHiddenFile(string path)
{
FileAttributes MyAttributes = File.GetAttributes(path);
string MyFileType = MyAttributes.ToString();
if (MyFileType.LastIndexOf("Hidden") != -1) //
{
return true;
}
else
return false;
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="FilePath"> </param>
/// <returns></returns>
public static string ReadTxtFile(string FilePath)
{
string content = "";//
using (FileStream fs = new FileStream(FilePath, FileMode.Open))
{
using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
string text = string.Empty;
while (!reader.EndOfStream)
{
text += reader.ReadLine() + "\r
";
content = text;
}
}
}
return content;
}
#endregion
#region ( path , )
/// <summary>
/// ( path , )
/// </summary>
/// <param name="FilePath"> </param>
/// <param name="WriteStr"> </param>
/// <param name="FileModes"> :append , CreateNew </param>
public static void WriteStrToTxtFile(string FilePath, string WriteStr, FileMode FileModes)
{
FileStream fst = new FileStream(FilePath, FileModes);
StreamWriter swt = new StreamWriter(fst, System.Text.Encoding.GetEncoding("utf-8"));
swt.WriteLine(WriteStr);
swt.Close();
fst.Close();
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <returns></returns>
public static string[] GetLocalDrives()
{
return Directory.GetLogicalDrives();
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <returns></returns>
public static string GetAppCurrentDirectory()
{
return Application.StartupPath;
}
#endregion
#region B,KB,GB,TB [+2 ]
/// <summary>
/// B,KB,GB,TB
/// </summary>
/// <param name="File"> (FileInfo )</param>
/// <returns></returns>
public static string GetFileSize(FileInfo File)
{
string Result = "";
long FileSize = File.Length;
if (FileSize >= 1024 * 1024 * 1024)
{
if (FileSize / 1024 * 1024 * 1024 * 1024 >= 1024) Result = string.Format("{0:############0.00} TB", (double)FileSize / 1024 * 1024 * 1024 * 1024);
else Result = string.Format("{0:####0.00} GB", (double)FileSize / 1024 * 1024 * 1024);
}
else if (FileSize >= 1024 * 1024) Result = string.Format("{0:####0.00} MB", (double)FileSize / 1024 * 1024);
else if (FileSize >= 1024) Result = string.Format("{0:####0.00} KB", (double)FileSize / 1024);
else Result = string.Format("{0:####0.00} Bytes", FileSize);
return Result;
}
/// <summary>
/// B,KB,GB,TB
/// </summary>
/// <param name="FilePath"> </param>
/// <returns></returns>
public static string GetFileSize(string FilePath)
{
string Result = "";
FileInfo File = new FileInfo(FilePath);
long FileSize = File.Length;
if (FileSize >= 1024 * 1024 * 1024)
{
if (FileSize / 1024 * 1024 * 1024 * 1024 >= 1024) Result = string.Format("{0:########0.00} TB", (double)FileSize / 1024 * 1024 * 1024 * 1024);
else Result = string.Format("{0:####0.00} GB", (double)FileSize / 1024 * 1024 * 1024);
}
else if (FileSize >= 1024 * 1024) Result = string.Format("{0:####0.00} MB", (double)FileSize / 1024 * 1024);
else if (FileSize >= 1024) Result = string.Format("{0:####0.00} KB", (double)FileSize / 1024);
else Result = string.Format("{0:####0.00} Bytes", FileSize);
return Result;
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="FileFullPath"> </param>
public static void DownLoadFiles(string FileFullPath)
{
if (!string.IsNullOrEmpty(FileFullPath) && FileExists(FileFullPath))
{
FileInfo fi = new FileInfo(FileFullPath);//
FileFullPath = HttpUtility.UrlEncode(FileFullPath); //
FileFullPath = FileFullPath.Replace("+", "%20"); // "+"
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileFullPath);
HttpContext.Current.Response.AppendHeader("content-length", fi.Length.ToString()); //
int chunkSize = 102400;// ,
byte[] buffer = new byte[chunkSize]; //
using (FileStream fs = fi.Open(FileMode.Open)) //
{
while (fs.Position >= 0 && HttpContext.Current.Response.IsClientConnected) //
{
int tmp = fs.Read(buffer, 0, chunkSize);//
if (tmp <= 0) break; //tmp=0 ,
HttpContext.Current.Response.OutputStream.Write(buffer, 0, tmp);//
HttpContext.Current.Response.Flush();//
Thread.Sleep(10);// , CPU
}
}
}
}
#endregion
}
}