C#访问文件路径通用类

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace Utility

{

/// <summary>

/// @Author:梁继龙

/// @Date:2012/8/1

/// @Email:[email protected]

/// @Description:文件处理类

/// </summary>

public class AccessDirFileHelper

{

public static AccessDirFileHelper instance = null;

private static readonly object lockObj = new object();

protected static System.Reflection.Assembly assembly = null; //反射

/// <summary>

/// 单例模式

/// </summary>

/// <returns></returns>

public static AccessDirFileHelper GetInstance()

{

//lock (AccessFileHelper.instance){ }

if (instance == null)

{

lock (lockObj)

{

instance = new AccessDirFileHelper();

}

}

return instance;

}

/// <summary>

/// 获取当前进程的完整路径,包含文件名(进程名)

/// result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名

/// </summary>

/// <returns></returns>

public string GetLocalProcessFileName()

{

try

{

return this.GetType().Assembly.Location;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名).

//result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

/// </summary>

/// <returns></returns>

public string GetCurrentProcessFileNamePath()

{

try

{

return System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 获取和设置当前目录(即该进程从中启动的目录)的完全限定路径.

/// result: X:\xxx\xxx (.exe文件所在的目录)

/// </summary>

/// <returns></returns>

public String GetCurrentEnvironmentDirectoryPath()

{

try

{

return System.Environment.CurrentDirectory;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。

///string str = System.AppDomain.CurrentDomain.BaseDirectory;

///result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

///Example:用来判断winfrom会少一个Debug  E:\\ASP.NET\\MyApp\\WebApp\\bin\\Debug\\bin\\Utility.dll"  web

///Example:用来判断winfrom会多一个Debug  E:\\ASP.NET\\MyApp\\WinApp\\bin\\Debug\\Utility.dll"  winform

///此方法一般判断一个解决方案启动是web还是winform读取文件(dll,config,txt等..)看情况定

/// </summary>

public string GetCurrentDomainBaseDirectory()

{

try

{   //效果一样

//System.Threading.Thread.GetDomain().BaseDirectory

return System.AppDomain.CurrentDomain.BaseDirectory;

}

catch (Exception e)

{

throw e;

}

}

/// <summary>

/// 获取和设置包含该应用程序的目录的名称。

///string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

///result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

/// </summary>

/// <returns></returns>

public string GetCurrentDomainSetupInformationName()

{

try

{

return System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称

/// string str = System.Windows.Forms.Application.StartupPath;

/// result: X:\xxx\xxx (.exe文件所在的目录)

/// </summary>

/// <returns></returns>

public  string GetWindowsApplicationStartupPath()

{

try

{

return System.Windows.Forms.Application.StartupPath;

}

catch (Exception e)

{

throw e;

}

}

/// <summary>

///获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。

///string str = System.Windows.Forms.Application.ExecutablePath;

///result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

/// </summary>

/// <returns></returns>

public string GetWindowsExecutablePath()

{

try

{

return System.Windows.Forms.Application.ExecutablePath;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 获取应用程序的当前工作目录(不可靠)

/// /string str = System.IO.Directory.GetCurrentDirectory();

/// result: X:\xxx\xxx (.exe文件所在的目录)

/// </summary>

/// <returns></returns>

public string GetCurrentDirectory()

{

try

{

return System.IO.Directory.GetCurrentDirectory();

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 这个方法的意思是:在同一个解决方案里面有两个工程,启动的时候

/// 去判断哪个工程是Winform或者是Web的配置

///Example:E:\\ASP.NET\\MyApp\\WinApp\\bin\\Debug\\MyApp.vshost.exe.Config" //winform

///Example:"E:\\ASP.NET\\MyApp\\WebApp\\web.config"  //web

///从后面的配置截取Example:String index=Path3.Substring(config.Length - 8);截取

///后面字符串判去判断,最好把都转换成小写或者大写

///index.ToUpper()="E.CONFIG"   /   index.ToLower()=="e.config"

/// </summary>

/// <returns></returns>

public System.Reflection.Assembly GetCurrentDomainConfigurationFile(string executeWinformConfig, string executeWebConfig)

{

try

{

string config = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

string index = config.Substring(config.Length - 8);

if (index.ToLower() == "e.config")  //把截取到的字符串转为为小写

{

assembly = System.Reflection.Assembly.LoadFile(executeWinformConfig); //加载dll文件

}

if (index.ToLower() == "b.config")

{

assembly = System.Reflection.Assembly.LoadFile(executeWebConfig); //加载dll文件

}

return assembly;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 无参数的GetCurrentDomainConfigurationFile方法

/// GetCurrentDomainConfigurationFile

/// </summary>

/// <returns></returns>

public string GetCurrentDomainConfigurationFile()

{

try

{

return AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// Application.StartupPath与AppDomain.CurrentDomain.BaseDirectory都是判断

/// 当前启动的工程,并体现能找到

/// Example:E:\\ASP.NET\\MyApp\\MyApp\\bin\\Debug路径下面,唯有不同的就是

/// AppDomain.CurrentDomain.BaseDirectory多了个 \\

/// Application.StartupPath而且是System.Windows.Forms

/// </summary>

/// <returns></returns>

public string GetStartupPath()

{

try

{

return System.Windows.Forms.Application.StartupPath;

}

catch (Exception)

{

throw;

}

}

/// <summary>

/// 获取文件的大小,一般指文件有多少个字节

/// </summary>

/// <param name="fileName"></param>

/// <returns></returns>

public string GetFileSize(string fileName)

{

try

{

if (File.Exists(fileName))

{

return Convert.ToString(new FileInfo(fileName).Length);

}

else

return fileName;

}

catch (Exception)

{

throw;

}

}

///<summary>

///在卸载程序获取系统安装的目录:

///System.Reflection.Assembly curPath = System.Reflection.Assembly.GetExecutingAssembly();

/// string path=curPath.Location;//得到安装程序类SetupLibrary文件的路径,获取这个文件路径

///所在的目录即得到安装程序的目录;

///</summary>

/// <returns></returns>

public String GetExecutingAssemblyDirectory()

{

try

{

System.Reflection.Assembly curPath = System.Reflection.Assembly.GetExecutingAssembly();

string path = curPath.Location;

return path;

}

catch (Exception ex)

{

throw ex;

}

}

#region

/// <summary>

/// 创建目录

/// </summary>

/// <param name="dir">此地路径相对站点而言</param>

public static void CreateDir(string dir)

{

if (dir.Length == 0) return;

if (!System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath(dir)))

System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(dir));

}

/// <summary>

/// 创建目录路径

/// </summary>

/// <param name="folderPath">物理路径</param>

public static void CreateFolder(string folderPath)

{

if (!System.IO.Directory.Exists(folderPath))

System.IO.Directory.CreateDirectory(folderPath);

}

/// <summary>

/// 删除目录

/// </summary>

/// <param name="dir">此地路径相对站点而言</param>

public static void DeleteDir(string dir)

{

if (dir.Length == 0) return;

if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath(dir)))

System.IO.Directory.Delete(System.Web.HttpContext.Current.Server.MapPath(dir), true);

}

/// <summary>

/// 判断文件是否存在

/// </summary>

/// <param name="file">格式:a/b.htm,相对根目录</param>

/// <returns></returns>

public static bool FileExists(string file)

{

if (File.Exists(System.Web.HttpContext.Current.Server.MapPath(file)))

return true;

else

return false;

}

/// <summary>

/// 读取文件内容

/// </summary>

/// <param name="file">格式:a/b.htm,相对根目录</param>

/// <returns></returns>

public static string ReadFile(string file)

{

if (!FileExists(file))

return "";

try

{

System.IO.StreamReader sr = new System.IO.StreamReader(System.Web.HttpContext.Current.Server.MapPath(file), System.Text.Encoding.UTF8);

string str = sr.ReadToEnd();

sr.Close();

return str;

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 保存为不带Bom的文件

/// </summary>

/// <param name="TxtStr"></param>

/// <param name="tempDir">格式:a/b.htm,相对根目录</param>

public static void SaveFile(string TxtStr, string tempDir)

{

SaveFile(TxtStr, tempDir, true);

}

/// <summary>

/// 保存文件内容,自动创建目录

/// </summary>

/// <param name="TxtStr"></param>

/// <param name="tempDir">格式:a/b.htm,相对根目录</param>

/// <param name="noBom"></param>

public static void SaveFile(string TxtStr, string tempDir, bool noBom)

{

try

{

CreateDir(GetFolderPath(true, tempDir));

System.IO.StreamWriter sw;

if (noBom)

sw = new System.IO.StreamWriter(System.Web.HttpContext.Current.Server.MapPath(tempDir), false, new System.Text.UTF8Encoding(false));

else

sw = new System.IO.StreamWriter(System.Web.HttpContext.Current.Server.MapPath(tempDir), false, System.Text.Encoding.UTF8);

sw.Write(TxtStr);

sw.Close();

}

catch (Exception ex)

{

throw ex;

}

}

/// <summary>

/// 复制文件

/// 这个方法在6.0版本后改写,虽看似比前面的版本冗长,但避免了file2文件一直被占用的问题

/// </summary>

/// <param name="file1"></param>

/// <param name="file2"></param>

/// <param name="overwrite">如果已经存在是否覆盖?</param>

public static void CopyFile(string file1, string file2, bool overwrite)

{

if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(file1)))

{

if (overwrite)

System.IO.File.Copy(System.Web.HttpContext.Current.Server.MapPath(file1), System.Web.HttpContext.Current.Server.MapPath(file2), true);

else

{

if (!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(file2)))

System.IO.File.Copy(System.Web.HttpContext.Current.Server.MapPath(file1), System.Web.HttpContext.Current.Server.MapPath(file2));

}

}

}

/// <summary>

/// 删除文件

/// </summary>

/// <param name="file">此地路径相对程序路径而言</param>

public static void DeleteFile(string file)

{

if (file.Length == 0) return;

if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(file)))

System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(file));

}

/// <summary>

/// 获得文件的目录路径

/// </summary>

/// <param name="filePath">文件路径</param>

/// <returns>以\结尾</returns>

public static string GetFolderPath(string filePath)

{

return GetFolderPath(false, filePath);

}

/// <summary>

/// 获得文件的目录路径

/// </summary>

/// <param name="isUrl">是否是网址</param>

/// <param name="filePath">文件路径</param>

/// <returns>以\或/结尾</returns>

public static string GetFolderPath(bool isUrl, string filePath)

{

if (isUrl)

return filePath.Substring(0, filePath.LastIndexOf("/") + 1);

else

return filePath.Substring(0, filePath.LastIndexOf("\\") + 1);

}

/// <summary>

/// 获得文件的名称

/// </summary>

/// <param name="filePath"></param>

/// <returns></returns>

public static string GetFileName(string filePath)

{

return GetFileName(false, filePath);

}

/// <summary>

/// 获得文件的名称

/// </summary>

/// <param name="isUrl">是否是网址</param>

/// <param name="filePath"></param>

/// <returns></returns>

public static string GetFileName(bool isUrl, string filePath)

{

if (isUrl)

return filePath.Substring(filePath.LastIndexOf("/") + 1, filePath.Length - filePath.LastIndexOf("/") - 1);

else

return filePath.Substring(filePath.LastIndexOf("\\") + 1, filePath.Length - filePath.LastIndexOf("\\") - 1);

}

/// <summary>

/// 获得文件的后缀

/// 不带点,小写

/// </summary>

/// <param name="filePath"></param>

/// <returns></returns>

public static string GetFileExt(string filePath)

{

return filePath.Substring(filePath.LastIndexOf(".") + 1, filePath.Length - filePath.LastIndexOf(".") - 1).ToLower();

}

/// <summary>

/// 目录拷贝

/// </summary>

/// <param name="OldDir"></param>

/// <param name="NewDir"></param>

public static void CopyDir(string OldDir, string NewDir)

{

DirectoryInfo OldDirectory = new DirectoryInfo(OldDir);

DirectoryInfo NewDirectory = new DirectoryInfo(NewDir);

CopyDir(OldDirectory, NewDirectory);

}

private static void CopyDir(DirectoryInfo OldDirectory, DirectoryInfo NewDirectory)

{

string NewDirectoryFullName = NewDirectory.FullName + "\\" + OldDirectory.Name;

if (!Directory.Exists(NewDirectoryFullName))

Directory.CreateDirectory(NewDirectoryFullName);

FileInfo[] OldFileAry = OldDirectory.GetFiles();

foreach (FileInfo aFile in OldFileAry)

File.Copy(aFile.FullName, NewDirectoryFullName + "\\" + aFile.Name, true);

DirectoryInfo[] OldDirectoryAry = OldDirectory.GetDirectories();

foreach (DirectoryInfo aOldDirectory in OldDirectoryAry)

{

DirectoryInfo aNewDirectory = new DirectoryInfo(NewDirectoryFullName);

CopyDir(aOldDirectory, aNewDirectory);

}

}

/// <summary>

/// 目录删除

/// </summary>

/// <param name="OldDir"></param>

public static void DelDir(string OldDir)

{

DirectoryInfo OldDirectory = new DirectoryInfo(OldDir);

OldDirectory.Delete(true);

}

/// <summary>

/// 目录剪切

/// </summary>

/// <param name="OldDirectory"></param>

/// <param name="NewDirectory"></param>

public static void CopyAndDelDir(string OldDirectory, string NewDirectory)

{

CopyDir(OldDirectory, NewDirectory);

DelDir(OldDirectory);

}

/// <summary>

/// 文件下载

/// </summary>

/// <param name="_Request"></param>

/// <param name="_Response"></param>

/// <param name="_fullPath">源文件路径</param>

/// <param name="_speed"></param>

/// <returns></returns>

public static bool DownloadFile(System.Web.HttpRequest _Request, System.Web.HttpResponse _Response, string _fullPath, long _speed)

{

string _fileName = GetFileName(false, _fullPath);

try

{

FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

BinaryReader br = new BinaryReader(myFile);

try

{

_Response.AddHeader("Accept-Ranges", "bytes");

_Response.Buffer = false;

long fileLength = myFile.Length;

long startBytes = 0;

double pack = 10240; //10K bytes

//int sleep = 200;   //每秒5次   即5*10K bytes每秒

int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;

if (_Request.Headers["Range"] != null)

{

_Response.StatusCode = 206;

string[] range = _Request.Headers["Range"].Split(new char[] { ‘=‘, ‘-‘ });

startBytes = Convert.ToInt64(range[1]);

}

_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());

_Response.AddHeader("Connection", "Keep-Alive");

_Response.ContentType = "application/octet-stream";

_Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));

br.BaseStream.Seek(startBytes, SeekOrigin.Begin);

int maxCount = (int)Math.Floor((fileLength - startBytes) / pack) + 1;

for (int i = 0; i < maxCount; i++)

{

if (_Response.IsClientConnected)

{

_Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));

System.Threading.Thread.Sleep(sleep);

}

else

{

i = maxCount;

}

}

}

catch

{

return false;

}

finally

{

br.Close();

myFile.Close();

}

}

catch

{

return false;

}

return true;

}

#endregion

}

}

时间: 2024-10-10 15:38:59

C#访问文件路径通用类的相关文章

ASP.NET文件操作通用类

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 using System.IO; 7 using System.Web; 8 using System.Web.UI; 9 using System.Web.UI.WebControls; 10 11 12 public class WebFileHelper 13 { 14 15 FileInfo f

封装读取文件路径的类File.h+File.m

1 #import <Foundation/Foundation.h> 2 3 #define FILE_PATH(filePath) [File path:(filePath)] 4 #define ROOT_PATH [File rootPath] 5 #define BUNDLE_PATH(fileName) [File bundleSource:(fileName)] 6 #define CREATE_FOLDER(folderPath) [File createFolder:(fol

C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </sum

C#---数据库访问通用类、Access数据库操作类、mysql类 .

//C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </summary&

访问指定路径下的目录以及文件

#include "stdafx.h" //vs2010下运行通过 #undef UNICODE #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <iostream> using namespace std; void browseFile(char* path) { char pattern[FILENAME_MAX + 1]; sprintf(p

Yii2:避免文件路径暴漏,代理访问文件

制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问 基本功能介绍:读取txt文档.读取图片,如果有需要,可以通过插件读取doc.pdf文档, http://www.yii2.com/uploads/temp/read.bmp是我的真实路径 控制器 <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/11/24 0024 * Time: 14:38 */ n

解决IE、360、谷歌浏览器等无法访问FTP中文文件路径

最近开发一个项目,用户的文件是存放在FTP服务器上的.并且需要在浏览器中,浏览这些文件.FTP文件路径如下: 但是却出现了如下问题:ftp://192.168.1.121/成果/分区/建设控制/市域控规划分.jpg 1.FTP中文文件路径在Firfox中可以正常显示 2.但是在IE.360.谷歌浏览其中却提示,无法访问路径 经过查询资料,知道IE等浏览器对中文字符采用的是GBK的字符集编码,但是Firfox却是采用的UTF-8的字符集编码. 所以得出如下结论: 1.在客户端判断浏览器产品是否属于

Linux上使用程序相对路径访问文件【转】

转自:http://blog.csdn.net/yinxusen/article/details/7444249 今天一个朋友问我这个问题,说为什么在Windows上跑得很好的应用程序,移植到Linux上后就读不到跟应用程序在同一文件夹下的文件呢,我说,这是linux和Windows在Work directory上设置的不同. 大家都知道,对于Windows而言,应用程序的默认工作目录就是应用程序所在的目录,它一般是不管应用程序是从哪个目录上下文启动的.那么在不更改工作目录的情况下,读文件使用相

Java I/O---RandomAccessFile类(随机访问文件的读取和写入)

1.JDK API中RandomAccessFile类的描述 此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在指向该隐含数组的光标或索引,称为文件指针:输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针.如果随机访问文件以读取/写入模式创建,则输出操作也可用:输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针.写入隐含数组的当前末尾之后的输出操作导致该数组扩展.该文件指针(实现数组随机读写)可以通过