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 ...
随机推荐
- frame与bounds的区别
原来你M,frame.size和bounds.size不总是一样的 在UIViewController的- (void)willAnimateRotationToInterfaceOrientatio ...
- jQuery框架的简单使用(H5)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- javascript 函数返回值(return)、定时器(setTimeout、setInterval)
一.函数的返回值:return 1.函数名+括号=return后面的值 <script> function fn1(){ return 100; } alert(fn1()); // 10 ...
- 在Ubuntu 64位OS上运行hadoop2.2.0[重新编译hadoop]
最近在学习搭建Hadoop, 我们从Apache官方网站直接下载最新版本Hadoop2.2.官方目前是提供了linux32位系统可执行文件,结果运行时发现提示 “libhadoop.so.1.0.0 ...
- Undefined symbols “_OBJC_CLASS_$_XXX” 问题
解决方法是点击工程,在targets界面中找到Build Phases,根据提示信息“XXX”来判断缺少什么文件,一般如果缺少自定义的文件,XXX会是缺少的类名,那么就在Complie Sources ...
- Leetcode: Range Sum Query 2D - Mutable && Summary: Binary Indexed Tree
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- MyEclipse下如何安装svn插件
方法一:在线安装 1.打开HELP->MyEclipse Configuration 不过多数情况下再myeclipse实现不了 Center.切换到SoftWare标签页. 2.点击 ...
- c++之路进阶——codevs1286(郁闷的出纳员)
1286 郁闷的出纳员 2004年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description OIER公司 ...
- php session 跨子域和跨服务器解决方式
Session主要分两部分: 一个是Session数据,该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在 另一个是标志着Session数据的Session Id,Sess ...
- ActivityGroup中EditText无法删除的问题
坑,以前比较少用ActivityGroup,最近使用才发现ActivityGroup中多个Activity中如果都有Edittext是无法后退删除. 网上说有种方法监听dispatchKeyEvent ...