public class Path_File
{
public string AppPath
{
get
{
return AppDomain.CurrentDomain.BaseDirectory;
}
} public Path_File()
{ } /// <summary>
/// 查找指定路径下的文件夹
/// </summary>
/// <param name="parentDirPath">指定路径</param>
/// <param name="findDir">文件夹</param>
/// <param name="findDirPath">文件夹路径</param>
/// <returns>是否找到</returns>
public bool FindDirectory(string parentDirPath, string findDir, ref string findDirPath, bool isRecursion = true)
{
bool isFind = false;
try
{
DirectoryInfo folder = new DirectoryInfo(parentDirPath.Trim()); //指定搜索文件夹
if (folder.Exists && !parentDirPath.Contains(findDir))//存在 文件夹
{
DirectoryInfo[] listDirInfos = folder.GetDirectories();//取得给定文件夹下的文件夹组
if (listDirInfos != null)
{
foreach (DirectoryInfo dirInfo in listDirInfos)//遍历
{
if (dirInfo.Name.ToLower() == findDir.Trim().ToLower())
{
findDirPath = dirInfo.FullName;
isFind = true;
break;
}
}
if (!isFind && isRecursion) //目录内未找到切递归子目录查找
{
foreach (DirectoryInfo dirInfo in listDirInfos)//遍历
{
string newParentDirPath = Path.Combine(parentDirPath, dirInfo.Name);
isFind = FindDirectory(newParentDirPath, findDir, ref findDirPath, isRecursion);
if (isFind)
{
break;
}
}
}
}
}
else
{
int count = parentDirPath.LastIndexOf(findDir) + findDir.Length;
findDirPath = parentDirPath.Substring(, count);
isFind = true;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return isFind;
} /// <summary>
/// 获取指定目录下的子目录名集
/// </summary>
/// <param name="parentDirPath">指定目录</param>
/// <returns>子目录名集</returns>
public List<string> getChildDirectories(string parentDirPath,bool isFullName = false)
{
List<string> listDirs = new List<string>();
DirectoryInfo folder = new DirectoryInfo(parentDirPath.Trim()); //指定搜索文件夹
if (folder.Exists)//存在 文件夹
{
DirectoryInfo[] listDirInfos = folder.GetDirectories();//取得给定文件夹下的文件夹组
if (listDirs != null)
{
foreach (DirectoryInfo dirInfo in listDirInfos)//遍历
{
if (isFullName)
{
listDirs.Add(dirInfo.FullName);
}
else
{
listDirs.Add(dirInfo.Name);
}
}
}
}
return listDirs;
} /// <summary>
/// 获取指定目录下的子文件名集
/// </summary>
/// <param name="parentDirPath">指定目录</param>
/// <returns>子目录名集</returns>
public List<string> getChildFiles(string parentDirPath, bool isFullName = false)
{
List<string> listFiles = new List<string>();
DirectoryInfo folder = new DirectoryInfo(parentDirPath.Trim()); //指定搜索文件夹
if (folder.Exists)//存在 文件夹
{
FileInfo[] listFileInfos = folder.GetFiles();//取得给定文件夹下的文件夹组
if (listFiles != null)
{
foreach (FileInfo fileInfo in listFileInfos)//遍历
{
if (isFullName)
{
listFiles.Add(fileInfo.FullName);
}
else
{
listFiles.Add(fileInfo.Name);
}
}
}
}
return listFiles;
} /// <summary>
/// 复制文件夹
/// </summary>
/// <param name="sourcePath">源目录</param>
/// <param name="targetPath">目的目录</param>
public bool CopyFolder(string sourcePath, string targetPath)
{
bool isSuccess = true;
try
{
DirectoryInfo sourceInfo = new DirectoryInfo(sourcePath);
if (sourceInfo.Exists) //源目录存在
{
DirectoryInfo targetInfo = new DirectoryInfo(targetPath);
if (!targetInfo.Exists)
{
targetInfo.Create();
} FileInfo[] files = sourceInfo.GetFiles(); //拷贝文件
foreach (FileInfo file in files)
{
file.CopyTo(Path.Combine(targetPath, file.Name), true);
} DirectoryInfo[] childDirInfos = sourceInfo.GetDirectories(); //拷贝目录
foreach (DirectoryInfo dirInfo in childDirInfos)
{
CopyFolder(Path.Combine(sourcePath, dirInfo.Name), Path.Combine(targetPath, dirInfo.Name));
}
}
}
catch (Exception)
{
isSuccess = false;
}
return isSuccess;
} /// <summary>
/// 确认路径存在(不存在则创建路径)
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public bool ConfirmPathExist(string path)
{
bool isExist = true;
try
{
DirectoryInfo folder = new DirectoryInfo(path.Trim());
if (!folder.Exists)//不存在 文件夹
{
folder.Create();
}
}
catch(Exception ex)
{
isExist = false;
}
return isExist;
} /// <summary>
/// 删除指定文件
/// </summary>
/// <param name="fFullName"></param>
/// <returns></returns>
public bool DeleteFile(string fFullName)
{
bool isSuccess = true;
try
{
FileInfo fInfo = new FileInfo(fFullName);
if (fInfo.Exists)//存在 文件
{
fInfo.Delete();
}
}
catch (Exception ex)
{
isSuccess = false;
}
return isSuccess;
} /// <summary>
/// 删除指定文件夹
/// </summary>
/// <param name="folderPath"></param>
/// <returns></returns>
public bool DeleteFolder(string folderPath)
{
bool isSuccess = true;
try
{
DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
if (dirInfo.Exists)//存在 文件夹
{
dirInfo.Delete(true);
}
}
catch (Exception ex)
{
isSuccess = false;
}
return isSuccess;
} /// <summary>
/// 替换路径下文件名中的标识
/// </summary>
/// <param name="filePath"></param>
/// <param name="oldTag"></param>
/// <param name="newTag"></param>
/// <returns></returns>
public bool ReplaceTagFromName(string filePath, string oldTag, string newTag,bool isIgnorCase = false)
{
bool isSuccess = true;
try
{
DirectoryInfo dirInfo = new DirectoryInfo(filePath);
if (!dirInfo.Exists)
{
dirInfo.Create();
}
FileInfo[] fileInfos = dirInfo.GetFiles();
foreach (FileInfo fileInfo in fileInfos)
{
string name = Path.GetFileNameWithoutExtension(fileInfo.Name);
if (isIgnorCase)
{
name = name.ToLower();
oldTag = oldTag.ToLower();
}
string newName = name.Replace(oldTag, newTag);
string newFileName = newName + fileInfo.Extension;
string fullName = Path.Combine(filePath,newFileName);
fileInfo.MoveTo(fullName);
}
}
catch (Exception ex)
{
isSuccess = false;
}
return isSuccess;
} /// <summary>
/// 更级名称
/// </summary>
/// <param name="fileFullName"></param>
/// <param name="i"></param>
/// <returns></returns>
public string getUniqueName(string fileFullName, int i = )
{
string fileName = fileFullName;
try
{
FileInfo fInfo = new FileInfo(fileFullName);
if (fInfo.Exists)
{
string ext = fInfo.Extension;
int length = fileFullName.LastIndexOf(ext);
fileName = fInfo.FullName.Substring(, length) + i + ext;
//string fileNamePath = Path.GetDirectoryName(fileFullName);
//string fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileFullName); //仅获取文件名,不包含路径
//fileName = fileNameWithoutExt + i + ext;
//fileName = Path.Combine(fileNamePath,fileName);
fInfo = new FileInfo(fileName);
if (fInfo.Exists)
{
i++;
fileName = getUniqueName(fileFullName, i);
}
}
}
catch
{
}
return fileName;
} /// <summary>
/// 更级名称
/// </summary>
/// <param name="fileFullName"></param>
/// <param name="i"></param>
/// <returns></returns>
public bool UpdateName(string fileFullName)
{
bool isSuccess = true;
try
{
string newName = getUniqueName(fileFullName);
FileInfo fInfo = new FileInfo(fileFullName);
if (fInfo.Exists)
{
fInfo.MoveTo(newName);
}
}
catch
{
isSuccess = false;
}
return isSuccess;
} public bool SaveInfos(string fileFullName, Dictionary<string, string> booksInfo, string tag = "|")
{
bool isSuccess = true;
try
{
FileInfo fInfo = new FileInfo(fileFullName);
FileStream fStream = null;
if (!fInfo.Exists)
{
fStream = fInfo.Create();
}
else
{
fStream = fInfo.Open(FileMode.CreateNew,FileAccess.ReadWrite);
}
StreamWriter sWrite = new StreamWriter(fStream);//(fileFullName, true);
foreach (string bookId in booksInfo.Keys)
{
string lineInfo = bookId + tag + booksInfo[bookId];
sWrite.WriteLine(lineInfo);
sWrite.Flush();
}
sWrite.Close();
}
catch
{
isSuccess = false;
}
return isSuccess;
} public bool AppendInfo(string fileFullName,string Info)
{
bool isSuccess = true;
try
{
FileInfo fInfo = new FileInfo(fileFullName);
FileStream fStream = null;
if (!fInfo.Exists)
{
fStream = fInfo.Create();
}
else
{
fStream = fInfo.Open(FileMode.Append, FileAccess.ReadWrite);
}
StreamWriter sWrite = new StreamWriter(fStream);
sWrite.WriteLine(Info);
sWrite.Flush();
sWrite.Close();
}
catch
{
isSuccess = false;
}
return isSuccess;
} }

+ 去掉.

  :string ext = Path.GetExtension(fileName.Trim()).Replace(".",string.Empty);

+文件名称是否包含标识字符串:

        public bool isFileNameContainsFlags(string fileName,List<string> contentFlags)
{
bool isContain = false;
if (contentFlags == null || contentFlags.Count == )
{
isContain = true;
}
else
{
foreach (string flag in contentFlags)
{
if (fileName.Contains(flag.Trim()))
{
isContain = true;
break;
}
}
}
return isContain;
}

+过滤特殊字符

/// <summary>
/// 过滤掉非法字符和点字符
/// </summary>
/// <param name="directoryName"></param>
/// <returns></returns>
public String DirectoryNameFilter(String directoryName)
{
string invalidChars = "\\/:*?\"<>|."; //自定义非法字符(比系统的多了个.)
foreach (char c in invalidChars)
{
directoryName = directoryName.Replace(c.ToString(), string.Empty);
}
return directoryName;
} /// <summary>
/// 过滤掉非法字符
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public String NameFilter(String name)
{
string invalidChars = "\\/:*?\"<>|"; //自定义非法字符(比系统的多了个.)
foreach (char c in invalidChars)
{
name = name.Replace(c.ToString(), string.Empty);
}
return name;
}

+打开文件夹浏览器

        /// <summary>
/// 打开文件夹浏览器
/// </summary>
/// <param name="dirPath"></param>
private string ShowFolderDialog(string dirPath)
{
string forderPath = dirPath.Trim();
if (!string.IsNullOrEmpty(forderPath))
{
this.fld_dlg.SelectedPath = forderPath;
} DialogResult dlgResult = fld_dlg.ShowDialog();
if (dlgResult == DialogResult.OK)
{
forderPath = fld_dlg.SelectedPath;
}
return forderPath;
}

+批量修改文件名

        /// <summary>
/// 修改文件名
/// </summary>
/// <param name="baseDirPath">基路径</param>
/// <param name="partName">修改文件名</param>
/// <param name="changeType">类型(0:替换,1:+前面,2:+后面)</param>
/// <param name="isRecursion">是递归</param>
/// <returns></returns>
public bool ChangeFilesName(string baseDirPath, string partName, int changeType, bool isRecursion)
{
bool isSuccess = true;
try
{
this.ConfirmPathExist(baseDirPath);
List<string> fileNames = this.getChildFiles(baseDirPath);
switch(changeType)
{
case :
int i = ;
foreach(string fName in fileNames)
{
string srcFullName = Path.Combine(baseDirPath,fName);
FileInfo fInfo = new FileInfo(srcFullName);
string dstFileName = partName + i + Path.GetExtension(fName);
string dstFullName = Path.Combine(baseDirPath, dstFileName);
fInfo.MoveTo(dstFullName);
i++;
}
break;
case :
foreach(string fName in fileNames)
{
string srcFullName = Path.Combine(baseDirPath,fName);
FileInfo fInfo = new FileInfo(srcFullName);
string dstFileName = partName + fName;
string dstFullName = Path.Combine(baseDirPath, dstFileName);
fInfo.MoveTo(dstFullName);
}
break;
case :
foreach (string fName in fileNames)
{
string srcFullName = Path.Combine(baseDirPath, fName);
FileInfo fInfo = new FileInfo(srcFullName);
string dstFileName = Path.GetFileNameWithoutExtension(fName) + partName + Path.GetExtension(fName);
string dstFullName = Path.Combine(baseDirPath, dstFileName);
fInfo.MoveTo(dstFullName);
}
break;
default:
break;
}
if (isRecursion)
{
List<string> dirFullNames = getChildDirectories(baseDirPath, true);
foreach(string dirFullName in dirFullNames)
{
ChangeFilesName(dirFullName, partName, changeType, isRecursion);
}
}
}
catch (Exception ex)
{
isSuccess = false;
}
return isSuccess;
}

+删除、清空目录

        private void DeleteDirector(string path)
{
if (!Directory.Exists(path))
return; string[] subdir = Directory.GetDirectories(path);
foreach (string dir in subdir)
DeleteDirector(dir); string[] files = Directory.GetFiles(path); foreach (string file in files)
{
File.Delete(file);
}
Directory.Delete(path);
} /// <summary>
/// 清空目录
/// </summary>
/// <param name="path">目录全路径</param>
private void ClearDirectory(string path)
{
if (!Directory.Exists(path))
return; string[] files = Directory.GetFiles(path);
foreach (string file in files)
{
try
{
File.Delete(file);
}
catch (Exception e)
{
_logger.Info("删除文件失败: ", e);
}
} string[] dirs = Directory.GetDirectories(path);
foreach (string dir in dirs)
{
try
{
ClearDirectory(dir);
Directory.Delete(dir);
}
catch (Exception e)
{
_logger.Info("删除目录失败: ", e);
}
}
}

更多:http://www.cnblogs.com/shenchao/p/5431163.html

C#:文件、路径(Path_File)的更多相关文章

  1. Oracle数据库文件路径变更

    环境:RHEL 6.4 + Oracle 11.2.0.3 情景一:只是部分普通数据文件迁移,可以在线操作. 1.将对应表空间offline,移动数据文件到新路径 2.数据文件alter databa ...

  2. Excel公式 提取文件路径后缀

    我们在代码中获取一个文件路径的后缀,是一个很简单的事. 如C#中,可以通过new FileInfo(filePath).Extension,或者Path.GetExtension(filePath)获 ...

  3. IISExpress Log 文件路径

    问题 用VS做开发时经常用IISExpress测试web程序,那么在测试过程中生成的Log文件放在哪里了? 答案 情况1 默认情况下 applicationhost.config 文中定义了连个日志文 ...

  4. [LeetCode] Longest Absolute File Path 最长的绝对文件路径

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  5. 使用powershell批量添加Keil和IAR的头文件路径

    在Keil和IAR的工程中,为了使文件结构清晰,通常会设置很多的子文件夹,然后将头文件和源文件放在不同的子文件夹中,这样就需要手动添加这些头文件夹的路径.当工程结构非常复杂时,文件夹的数量就非常多,特 ...

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

    制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问 基本功能介绍:读取txt文档.读取图片,如果有需要,可以通过插件读取doc.pdf文档, ...

  7. php glob()函数实现目录文件遍历与寻找与模式匹配的文件路径

    采用PHP函数glob实现寻找与模式匹配的文件路径,主要讨论glob()函数的作用和用法,利用glob函数读取目录比其它的要快N倍,因为glob函数是内置函数处理起来自然要快. 一,函数原型 arra ...

  8. java 读文件路径问题

    文件路径:右键点击src新建Source Folder,创建结果与src目录同级. C:\Users\lenovo\workspace\timedTask\config\userinfo.proper ...

  9. 关于获取web应用的文件路径的注意事项

    今天在把数据写入文件时遇到了一个问题,指定的文件获取不到.一开始是这样的 URL url = XXX.class.getClassLoader().getResource(fileName);File ...

  10. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

随机推荐

  1. C#通过存储过程进行查询

    一直不确定C#可以通过存储过程进行查询,今天才确定是可以的. 可以返回DataReader或者Dataset.

  2. chart crash

    * thread #155: tid = 0x1fcc10, 0x0000000107626745 gpxj`static gpxj.ChartUtils.decimals (gpxj.ChartUt ...

  3. node.js中使用node-schedule实现定时任务

    摘要:有时我们需要在每天的固定时间执行某个脚本,或者在某个固定时间执行某个任务.NodeJS中的 node-schedule 可以很好的实现定时任务. 1.安装 npm install node-sc ...

  4. 使用pgbench测试PostgreSQL

    pgbench –help 初始化选项: -i            调用初始化模式 -F NUM  填充因子 -s NUM   规模因子(与产生数据量大小有关) Benchmarking选项: -c ...

  5. Lintcode: Expression Evaluation (Basic Calculator III)

    Given an expression string array, return the final result of this expression Have you met this quest ...

  6. Lintcode: Interval Minimum Number

    Given an integer array (index from 0 to n-1, where n is the size of this array), and an query list. ...

  7. Lintcode: Majority Number III

    Given an array of integers and a number k, the majority number is the number that occurs more than 1 ...

  8. 超炫的3D HTML源代码

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  9. 初始化 Gradle 工程目录(转自: 隔叶黄莺 Unmi Blog)

    最近重新在 Eclipse 中打开旧的 Maven 项目,总有些什么错误,备受折磨.期间试手了 Ant+Ivy, 现今试用了下 Gradle,感觉不错,它应该才是我真想要的,Maven 差不多该扔到一 ...

  10. zoj The 12th Zhejiang Provincial Collegiate Programming Contest Team Formation

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5494 The 12th Zhejiang Provincial ...