C#.NET 文件目录操作类

 

  
    
using System;
using System.Web;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.IO.Compression;

namespace Pub.Class
{
/// <summary>
/// 文件目录操作类
/// </summary>
public class FileFolder
{
#region CreateFolder/CreateDir
/// <summary>
/// 目录不存在时新建
/// </summary>
/// <param name="filePath"> 目录(相对路径) </param>
public static void CreateFolder( string filePath)
{
string [] PathArr = filePath.Split( new string [] { " / " }, StringSplitOptions.None);
string _path = PathArr[ 0 ];
for ( int i = 1 ; i < PathArr.Length; i ++ ) {
_path
= _path + " / " + PathArr[i];
string _filePath = HttpContext.Current.Server.MapPath(_path);
if ( ! System.IO.Directory.Exists(_filePath)) {
System.IO.Directory.CreateDirectory(_filePath);
}
}
}
/// <summary>
/// 创建目录
/// </summary>
/// <param name="name"> 名称 </param>
/// <returns> 创建是否成功 </returns>
[DllImport( " dbgHelp " , SetLastError = true )]
private static extern bool MakeSureDirectoryPathExists( string name);
/// <summary>
/// 建立文件夹
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static bool CreateDir( string name)
{
return MakeSureDirectoryPathExists(name);
}
/// <summary>
/// 目录是否存在
/// </summary>
/// <param name="folderPath"></param>
/// <returns></returns>
public static bool FolderExists( string folderPath) {
return System.IO.Directory.Exists(folderPath);
}
#endregion

#region FileExists/DelAllFile/DelFile/GetAllFile/BackupFile
/// <summary>
/// 返回文件是否存在
/// </summary>
/// <param name="filename"> 文件名 </param>
/// <returns> 是否存在 </returns>
public static bool FileExists( string filename)
{
return System.IO.File.Exists(filename);
}
/// <summary>
/// 删除指定目录下的所有文件
/// </summary>
/// <param name="path"></param>
public static void DelAllFile( string path) {
DirectoryInfo Folder
= new DirectoryInfo(path);
FileInfo[] subFiles
= Folder.GetFiles();
for ( int j = 0 ; j < subFiles.Length; j ++ ) {
subFiles[j].Delete();
}
}
/// <summary>
/// 删除指定文件
/// </summary>
/// <param name="filePath"></param>
public static void DelFile( string filePath) {
if (FileExists(filePath)) System.IO.File.Delete(filePath);
}
/// <summary>
/// 取指定目录下的所有文件名
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static StringBuilder GetAllFile( string path) {
StringBuilder fileList
= new StringBuilder();
try {
DirectoryInfo Folder
= new DirectoryInfo(path);
FileInfo[] subFiles
= Folder.GetFiles();
for ( int j = 0 ; j < subFiles.Length; j ++ ) {
fileList.Append(subFiles[j].Name
+ " | " );
}
}
catch { }
return fileList.Length.Equals( 0 ) ? fileList : fileList.Remove(fileList.Length - 1 , 1 );
}
/// <summary>
/// 取目录下的所有文件
/// </summary>
/// <param name="path"></param>
/// <param name="fileList"></param>
/// <param name="delStr"></param>
public static void GetAllFile( string path, ref StringBuilder fileList, string delStr) {
if (delStr.Equals( "" )) delStr = path;
delStr
= delStr.Substring(delStr.Length - 1 ).Equals( " \\ " ) ? delStr : delStr + " \\ " ;
string [] files = System.IO.Directory.GetFiles(path);
foreach ( string s in files) fileList.Append(s + " | " ).Replace(delStr, "" );
string [] dir = System.IO.Directory.GetDirectories(path);
foreach ( string s in dir) GetAllFile(s, ref fileList,delStr);
}
/// <summary>
/// 备份文件
/// </summary>
/// <param name="sourceFileName"></param>
/// <param name="destFileName"></param>
/// <param name="overwrite"></param>
/// <returns></returns>
public static bool BackupFile( string sourceFileName, string destFileName, bool overwrite) {
if ( ! File.Exists(sourceFileName)) return false ;
if ( ! overwrite && File.Exists(destFileName)) return false ;

try {
File.Copy(sourceFileName, destFileName,
true );
}
catch {
return false ;
}
return true ;
}
#endregion
/// <summary>
/// 取文件编码
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static Encoding GetFileEncoding( string fileName) {
/* byte[] Unicode=new byte[]{0xFF,0xFE};
byte[] UnicodeBIG=new byte[]{0xFE,0xFF};
byte[] UTF8=new byte[]{0xEF,0xBB,0xBF};
*/

try {
FileStream fs
= new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader r
= new BinaryReader(fs,System.Text.Encoding.Default);
byte [] ss = r.ReadBytes( 3 );
r.Close();
fs.Close();
fs.Dispose();

if (ss[ 0 ] >= 0xEF ) {
if (ss[ 0 ] == 0xEF && ss[ 1 ] == 0xBB && ss[ 2 ] == 0xBF )
return System.Text.Encoding.UTF8;
else if (ss[ 0 ] == 0xFE && ss[ 1 ] == 0xFF )
return System.Text.Encoding.BigEndianUnicode;
else if (ss[ 0 ] == 0xFF && ss[ 1 ] == 0xFE )
return System.Text.Encoding.Unicode;
else
return System.Text.Encoding.Default;
}
else return System.Text.Encoding.Default;
}
catch {
return System.Text.Encoding.Default;
}
}

public static void GZipCompress( string inFilename, string outFilename) {
FileStream sourceFile
= File.OpenRead(inFilename);
FileStream destFile
= File.Create(outFilename);
GZipStream compStream
= new GZipStream(destFile, CompressionMode.Compress);
int theByte = sourceFile.ReadByte();

while (theByte != - 1 ) {
compStream.WriteByte((
byte )theByte);
theByte
= sourceFile.ReadByte();
}

sourceFile.Close();
compStream.Close();
destFile.Close();
}

public static void GZipDecompress( string inFileName, string outFileName) {
FileStream sourceFile
= File.OpenRead(inFileName);
FileStream destFile
= File.Create(outFileName);
GZipStream compStream
= new GZipStream(sourceFile, CompressionMode.Decompress);
int theByte = compStream.ReadByte();

while (theByte != - 1 ) {
destFile.WriteByte((
byte )theByte);
theByte
= compStream.ReadByte();
}

destFile.Close();
compStream.Close();
sourceFile.Close();
}

public static long GetDirectorySize( string path) {
long size = 0 ;
string [] files = System.IO.Directory.GetFiles(path);
foreach ( string s in files) size += new FileInfo(s).Length;
string [] dir = System.IO.Directory.GetDirectories(path);
foreach ( string s in dir) size += GetDirectorySize(s);
return size;
}

public static long GetFileSize( string path) {
if ( ! FileExists(path)) return 0 ;
return new FileInfo(path).Length;
}
}
}

 

你可能感兴趣的:(.net)