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 ...
随机推荐
- CPU虚拟化技术(留坑)
留坑~~~ 不知道这个是这么实现的 CPU虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率.虚 ...
- tinyxml安装和使用
下载: 官方文档:http://www.grinninglizard.com/tinyxmldocs/index.html 中文翻译:http://www.cnblogs.com/kex1n/arch ...
- 转:Tomcat配置
一.修改Tomcat端口号步骤: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml文件里 ...
- [Reprint]C++普通函数指针与成员函数指针实例解析
这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...
- 算法提高 c++_ch02_01
http://lx.lanqiao.org/problem.page?gpid=T237 算法提高 c++_ch02_01 时间限制:1.0s 内存限制:512.0MB 编写一个程 ...
- 【IOS】2.基础
1.Identifers命名规则 Identifers is combined with letters, underline, dollars, numbers must begin with le ...
- [摘录]quarts:feature
Features of Quartz Runtime Environments Quartz can run embedded within another free standing applica ...
- [转]Apache Maven 入门篇 ( 上 )
原文地址:Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这 ...
- C#Windows窗体应用程序MyKTV项目
后台管理其中有一个添加歌手信息和歌曲信息的窗体要点击按钮并上传文件,因为对那些文件流什么的不懂,所以用了老师教的最简单的判断方法,但此方法只是按后缀名判断文件的样式,如果后缀名乱改就不行了! 此时需要 ...
- PAT乙级 1004. 成绩排名 (20)
1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...