C# 文件的一些基本操作
近期程序中经常用到一些文件的操作,现在大致整理一下。
一、 获取文件或文件夹基本信息
1、获取文件信息,组成一个DataTable信息。
/// <summary>
/// 获取指定目录下,文件信息
/// </summary>
/// <param name="path">绝对路径</param>
/// <returns></returns>
public DataTable GetInfo(string path)
{
string fileName = "", fileType = "", capacity = "", editTime = "", dir = "", file = "";
DataTable dt = new DataTable();
dt.Columns.Add("fileName");
dt.Columns.Add("fileType");
dt.Columns.Add("capacity");
dt.Columns.Add("editTime");
dt.Columns.Add("dir");
dt.Columns.Add("file"); DirectoryInfo di = new DirectoryInfo(path);
foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
{
DataRow nrow = dt.NewRow();
if (fsi is FileInfo)//如果是文件
{
FileInfo fi = (FileInfo)fsi;
fileName = fi.Name;//获取文件名
file = fi.FullName;//获取完整目录
if (fi.Extension.Length < )//如果扩展名小于一
{
fileType = "";
}
else
{
fileType = fi.Extension.Remove(, );//获取文件扩展名
}
dir = fi.Directory.ToString();
capacity = pub.FileCountSize(Convert.ToInt32(fi.Length.ToString()));//计算文件大小
editTime = fi.LastWriteTime.ToString();//获取最后一次修改时间
}
else //如果是文件夹
{
di = (DirectoryInfo)fsi;
fileName = di.Name;
dir = di.FullName;
file = "";
fileType = "文件夹";
capacity = "";
editTime = di.LastWriteTime.ToString();
}
nrow["fileName"] = fileName;
nrow["fileType"] = fileType;
nrow["capacity"] = capacity;
nrow["editTime"] = editTime;
nrow["dir"] = dir;
nrow["file"] = file; dt.Rows.Add(nrow);
}
dt.DefaultView.Sort = "editTime desc";
return dt;
}
2、调用GetInfo方法,展示文件信息,结果如下

二、递归调用----复制文件到指定目录
用到一功能,复制一个文件夹下的文件到另一个目录下,文件夹下存在各种文件和文件夹
复制文件简单直接用File.Copy()就行了,但是文件夹就比较难处理了,因为文件夹里面的内容不定,说不定有文件夹下还有文件夹,这就用到了递归
什么是递归函数/方法?
任何一个方法既可以调用其他方法也可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或递归方法。
通常递归有两个特点:
1. 递归方法一直会调用自己直到某些条件被满足
2. 递归方法会有一些参数,而它会把一些新的参数值传递给自己。
/// <summary>
/// 拷贝源文件的文件到新文件下(传递的参数路径均为物理路径)
/// </summary>
/// <param name="sourcePath">需要拷贝的源文件路径</param>
/// <param name="savePath">保存的目标文件路径</param>
/// <param name="isUpdate">如果文件已存在是否覆盖</param>
/// <returns>true:拷贝成功;false:拷贝失败</returns>
public bool CopyOldFilesToNew(string sourcePath, string savePath, bool isUpdate)
{
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
try
{
string[] labDirs = Directory.GetDirectories(sourcePath);//获取文件夹目录
string[] labFiles = Directory.GetFiles(sourcePath);//获取文件目录
if (labFiles.Length > )
{
for (int i = ; i < labFiles.Length; i++)
{
if (isUpdate)//如果文件已存在,则覆盖
{
if (Path.GetFileName(labFiles[i]) != "wenshu.rar")//排除文件
{
File.Copy(sourcePath + "\\" + Path.GetFileName(labFiles[i]), savePath + "\\" + Path.GetFileName(labFiles[i]), true);
}
}
else//如果文件已存在则跳过
{
if (Path.GetFileName(labFiles[i]) != "wenshu.rar" && !System.IO.File.Exists(savePath + "\\" + Path.GetFileName(labFiles[i])))//排除文件
{
File.Copy(sourcePath + "\\" + Path.GetFileName(labFiles[i]), savePath + "\\" + Path.GetFileName(labFiles[i]));
}
}
}
}
if (labDirs.Length > )
{
for (int j = ; j < labDirs.Length; j++)
{
if (isUpdate)//如果文件已存在,则覆盖
{
if (Path.GetFileName(labDirs[j]) != "wenshu")
{
Directory.GetDirectories(sourcePath + "\\" + Path.GetFileName(labDirs[j]));
//递归调用
CopyOldFilesToNew(sourcePath + "\\" + Path.GetFileName(labDirs[j]), savePath + "\\" + Path.GetFileName(labDirs[j]), isUpdate);
}
}
else//如果文件已存在则跳过
{
if (Path.GetFileName(labDirs[j]) != "wenshu" && !Directory.Exists(savePath + "\\" + Path.GetFileName(labDirs[j])))
{
Directory.GetDirectories(sourcePath + "\\" + Path.GetFileName(labDirs[j]));
//递归调用
CopyOldFilesToNew(sourcePath + "\\" + Path.GetFileName(labDirs[j]), savePath + "\\" + Path.GetFileName(labDirs[j]), isUpdate);
}
}
}
}
}
catch (Exception)
{
return false;
}
return true;
}
程序调用
string path = Server.MapPath("../zfjl/lsh");
CopyOldFilesToNew(path, Server.MapPath("../zfjl/lsh/wenshu"), false);
三、整理一下常用的基本操作。
1、删除指定文件
//file为绝对路径
File.Delete(file);
2、拷贝文件
string sourceFile = @"c:\abc.txt";//源路径
string targetFile = @"e:\temp\abc.txt";//目标路径
bool iscover=true; // true=覆盖已存在的同名文件,false则反之
System.IO.File.Copy(sourcePath,targetFile,iscover);
3、判断文件夹是否存在,若不存在则创建。
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
4、判断文件是否存在
//file是文件路径,为绝对路径。例如:D:\abc.txt
File.Exists(file)
C# 文件的一些基本操作的更多相关文章
- C# 文件的一些基本操作(转)//用C#读写ini配置文件
C# 文件的一些基本操作 2009-07-19 来自:博客园 字体大小:[大 中 小] 摘要:介绍C#对文件的一些基本操作,读写等. using System;using System.IO;us ...
- 【程序员技术练级】熟悉Unix/Linux Shell和常见的命令行(一)文件系统结构和基本操作
作为程序猿,熟悉一些unix/linux命令行是非常必要的,因为部署服务的服务器现在基本上用的都是unix/linux系统,很少在windows上部署服务的. 今天我们就介绍一些在linux上的文件系 ...
- linux文件和目录基本操作
比较特殊的目录: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 -代表当前用户身份所在的主文件夹 -account 代表account用户所在主文件夹 1.目录相关操作 cd切换 ...
- vc++基础班[23]---文件夹的基本操作
①.文件夹的创建:CreateDirectory ※※※ 注意:此函数只能创建一层目录,比如想在 C 盘下的 Temp 目录下创建新目录为:123 那么前提是 Temp 这个目录存在才可以! ...
- linux中文件或者文件夹的基本操作(复制,移动,删除,查找,压缩)
linux 文件(文件夹)的创建,复制,移动,重命名,删除基本命令 复制文件或整个目录 cp 源文件名 目标文件夹/[目标文件名]cp -rv 源文件夹 目标文件夹/[目标文件夹名] --r 递归目录 ...
- GoLang文件增删遍历基本操作
先学一学GO语言实用的一面. package main import ( "path/filepath" "flag" "os" " ...
- hdfs shell的基本操作以及hdfsWeb查看文件
在安装好hadoop集群并成功的启动了hdfs之后,我们就可以利用hdfs对文件进行操作了,一下是对文件的一些基本操作 hdfs基本操作 1.查询命令 hadoop dfs -ls / 查询/目录 ...
- Python学习Day2笔记(集合和文件操作)
1.集合的使用 列表是有序的可包含重复内容的 集合是无序的不可包含重复内容的 1) 集合关系测试 #列表去重list_1=[1,4,5,6,7,8,9,7,5,4,23,2] #有重复数据 list_ ...
- Python基础7:文件操作
[ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...
随机推荐
- Java集合框架(二)
原文 http://www.jianshu.com/p/2070cb32accb List接口 查阅API,看 List 的介绍.有序的 collection (也称为序列).此接口的用户可以对列表 ...
- 值得 .NET 开发者了解的15个特性
本文列举了 15 个值得了解的 C# 特性,旨在让 .NET 开发人员更好的使用 C# 语言进行开发工作. 1. ObsoleteAttribute ObsoleteAttribute 适用于除组件. ...
- Java jsoup爬取图片
jsoup爬取百度瀑布流图片 是的,Java也可以做网络爬虫,不仅可以爬静态网页的图片,也可以爬动态网页的图片,比如采用Ajax技术进行异步加载的百度瀑布流. 以前有写过用Java进行百度图片的抓取, ...
- bat脚本:windows下一键启动zookeeper+kafka
bat脚本:windows下一键启动zookeeper+kafka 把下面两行代码存为bat文件,双击执行即可.注意更改相应的目录 这里用ping来控制时间(先zookeeper,ping 4 次后 ...
- JavaScript -- 知识点汇总
js语法 1. javascript数据类型 JavaScript拥有动态类型.这意味着相同的变量可用作不同的类型:有 字符串,数字, 布尔值, 对象, 数组,Undefined和Null 对象: v ...
- 二分查找(binary search)java实现及时间复杂度
概述 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是拿low到high的正中间的值,我们假设是m,来跟v相比,如果m& ...
- linux --> 为什么寄存器比内存快?
为什么寄存器比内存快 计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘. 原因一:距离不同 距离不是主要因素,但是最好懂,所以放在最前面 ...
- Mybatis 常用标签
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...
- Suricata默认规则集相关
Suricata规则集 Suricata 基于规则检测和控制数据流量,所有规则的配置文件保存在rules目录内 .这些是已知和确认的活动僵尸网络和其C&C(command and contro ...
- 强烈推荐!!!Fiddler抓取https设置详解(图文)
很多实用fiddler抓包,对于http来说不需太多纠结,随便设置下就能用,但是抓取https就死活抓不了, 诸如以下问题: creation of the root certificate was ...