C#:文件、文件夹特别操作
1、过滤特殊字符
public class CharService:IDisposable
{
private List<char> _invalidChars;
public CharService()
{
_invalidChars = new List<char>();
_invalidChars.AddRange(Path.GetInvalidFileNameChars());
_invalidChars.AddRange(Path.GetInvalidPathChars());
} /// <summary>
/// 特殊字符过滤
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string SplitStringInvaild(string str,bool isLower=true)
{
str = ToDBC(str);
StringBuilder sb = new StringBuilder();
foreach (char c in str)
{
if (_invalidChars.Contains(c))
continue; if(isLower)
sb.Append(ToLower(c));
else
sb.Append(c);
}
str = sb.ToString().Trim();
if (isLower)
{
if (str.Substring(str.Length-,)==".")
{
str = str.Substring(, str.Length - );
}
}
return str;
} public static char ToLower(char c)
{
if (('A' <= c) && (c <= 'Z'))
{
c = (char)(c | ' ');
}
return c;
} public static String ToDBC(String input)
{
char[] c = input.ToCharArray();
for (int i = ; i < c.Length; i++)
{
if (c[i] == )
{
c[i] = (char);
continue;
}
if (c[i] > && c[i] < )
c[i] = (char)(c[i] - );
}
return new String(c);
} public void Dispose()
{
_invalidChars = null;
}
}
2、将DataTable数据保存为.csv文件
private bool DataTableToCsv(System.Data.DataTable tb, string FileName)
{
bool Export = false;
TextWriter writer = null;
try
{
string text = String.Empty;
// 使用指定编码和缓冲区大小,为指定路径上的指定文件初始化 StreamWriter 类的新实例。
// 如果该文件存在,则可以将其覆盖或向其追加。如果该文件不存在,则此构造函数将创建一个新文件。
writer = new StreamWriter(FileName, false, Encoding.UTF8); // 取得列的个数
int count = tb.Columns.Count;
string[] fields = new string[count];
// 循环添加列名
for (int i = ; i < count; i++)
{
DataColumn column = tb.Columns[i]; fields[i] = column.ColumnName; }
text = string.Join(",", fields);
writer.WriteLine(text);
// 遍历行
foreach (DataRow row in tb.Rows)
{
// 给每一行添加列单元
for (int i = ; i < count; i++)
{
if (row[i] == null)
{
fields[i] = String.Empty;
continue;
}
if (row[i] == DBNull.Value)
{
fields[i] = String.Empty;
continue;
}
string field = row[i].ToString();
// CSV格式有规定,比如,如果字段中有逗号、双引号、回车换行符、前或后置空格,
// 必须把字段用双引号扩起来,如果文本中有双引号,必须用两个双引号替换
field = field.Replace("\"", "\"\"");
if (field.IndexOf(',') >= )
{
fields[i] = string.Format("\"{0}\"", field);
continue;
}
if (field.IndexOf('\r') >= )
{
fields[i] = string.Format("\"{0}\"", field);
continue;
}
if (field.IndexOf('\n') >= )
{
fields[i] = string.Format("\"{0}\"", field);
continue;
}
if (field.IndexOf('\"') >= )
{
fields[i] = string.Format("\"{0}\"", field);
continue;
}
if (field != field.Trim())
{
fields[i] = string.Format("\"{0}\"", field);
continue;
}
fields[i] = (i == ) ? DateTime.Parse(row[i].ToString()).ToString("yyyy/MM/dd HH:mm:ss") : row[i].ToString();
}
text = string.Join(",", fields);
writer.WriteLine(text);
}
_logServ.Debug("导出成功");
//Console.WriteLine("导出成功", "提示");
Export = true;
}
catch (Exception ex)
{
_logServ.Error("导出失败" + ex.Message);
// Console.WriteLine("导出失败" + ex.Message, "提示");
Export = false;
}
finally
{
if (writer != null)
{
writer.Close();
}
}
return Export;
}
3、+过滤掉非法字符
/// <summary>
/// 过滤掉非法字符和点字符
/// </summary>
/// <param name="directoryName"></param>
/// <returns></returns>
public String DirectoryNameFilter(String directoryName)
{
string invalidChars = "\\/:*?\"<>|."; //自定义非法字符(比系统的多了个.)
foreach (char c in invalidChars)
{
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.Replace(c.ToString(), string.Empty);
}
return name;
}
4、计算文件夹大小
#region 计算文件夹大小 /// <summary>
/// 计算文件夹大小
/// </summary>
/// <param name="dirPath">文件夹</param>
/// <returns></returns>
public long CalculateDirSize(string dirPath)
{
long sumSize = ;
try
{
if (!Directory.Exists(dirPath))
{
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
FileInfo[] files = dirInfo.GetFiles();
foreach (FileInfo fInfo in files)
{
sumSize += fInfo.Length;
}
DirectoryInfo[] dirs = dirInfo.GetDirectories();
foreach (DirectoryInfo dInfo in dirs)
{
sumSize += CalculateDirSize(dInfo.FullName);
}
}
}
catch (Exception ex)
{
LogHelper.Instance.Error("计算文件夹大小(" + dirPath + ")出错:" + ex.Message);
}
return sumSize;
}
C#:文件、文件夹特别操作的更多相关文章
- QT文件(夹)操作---QFile、QDir、QFileInfo、QTextStream和QDataStream异同
1.1 文件和目录 QFile.QBuffer和QTcpSocket可支持读写设备,用open函数打开,用write或putChar函数写入.用read和readLine或readAll进行读取 ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
- Sharepoint中有关文件夹的操作
1.GetItemsWithUniquePermissions根据返回数量和是否返回文件夹获取唯一权限的列表项集合 对于SharePoint对象模型中SPList的GetItemsWithUnique ...
- 用C#操作文件/文件夹(删除,复制,移动)
操作某一个文件/文件夹,需要一个文件的完整路径 一.使用File的静态方法进行文件操作 //使用file的静态方法进行复制 File.Copy(path, destpath); //使用File的静态 ...
- python之文件的读写和文件目录以及文件夹的操作实现代码
这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...
- Qt: 文件、文件夹的操作;
Qt没有提供单独的函数来对文件.文件夹进行操作, 但是提供了两个类: QFile, QDir; 1.文件操作 ) 文件是否存在: QFile file("D:/test.jpg") ...
- JAVA文件操作类和文件夹的操作代码示例
JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...
- python 关于文件夹的操作
在python中,文件夹的操作主要是利用os模块来实现的, 其中关于文件夹的方法为:os.lister() , os.path.join() , os.path.isdir() # path 表示文 ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
随机推荐
- 第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- 统计哪些程序占用了swap
命令如下 : for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END ...
- CGRect 结构体的另外一种写法
// _textF = CGRectMake(textX, textY, textSize.width, textSize.height); _textF = (CGRect){{textX, ...
- [原创]java WEB学习笔记60:Struts2学习之路--Actioin-声明式异常处理
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记51:国际化 概述,API 之 locale类,dataFormat类,numberFormat类, MessageFormat类,ResourceBundle 类
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- C++之路进阶——bzoj3524(Couriers)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser gryz2016 Logout 捐赠本站 Notice:由于本OJ ...
- C makefile
Makefile编写 hello.out:max.o main.c gcc max.o main.c -o hello.out max.o:max.c gcc -c max.c -o max.o
- WindowsService 安装后报错: 无法启动计算机“.”上的服务 解决方案
问题 : 根据客户的需求做了一个小程序,需要有对WindowsService 安装,卸载,启动,停止的操作. 编译好之后在我的工程内直接Run 没问题.直接在\bin\Debug 点小程序运行,任何操 ...
- Linux 远程和本地的一些解决方案
有的小伙伴想Linux 远程登录 两台机器同时root登录,其实可以同时多个用户的. Linux是多用户的多任务系统,可以同时多个用户登录到系统,也可以一个用户通过不同终端登录到一个系统执行不同的操 ...
- oracle冷备份后恢复
本地恢复 在运行中输入cmd. 在cmd界面中输入sqlplus/nolog进入sql*plus. 以dba身份连接数据库conn sys/你设定的密码 as sysdba. 输入:shutdown ...