目录
1 文件及文件夹系列
1.1 文件打开对话框
1.2 文件保存对话框
1.3 目录读取对话框
1.4 文本数据的读写
1.5 Path类与File类
1.6 DirectoryInfo类与Directory类
2 窗体控件的使用
2.1 splitContainer容器制作可伸缩界面
2.2 textBox拖拽功能的使用
2.3 DataGridView、MDB数据库
3 杂项
3.1 应用配置【大小图标、VS2015中英文界面变换及项目创建】
3.2 基础巩固
3.3 操作Excel
3.4 操作PDF
3.5 行业应用
3.6 其他应用
本文为C#系列的第41篇博文,学习C#一年来,经历了不少的挫折,也查询了不少的资料;虽然已经写了40篇博客,但仍然是处于初级阶段,学习的也不够系统。今天就借此机会学到的知识进行梳理,也分享给有兴趣的读者。
之前也写过几个总结的博文:
筛选拓展名、单选模式、记忆目录
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本文档(.txt)|*.txt";
//记住目录
ofd.RestoreDirectory = true;
//指定单选模式
ofd.Multiselect = false;
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string filePath = ofd.FileName;
}
SaveFileDialog sfd = new SaveFileDialog();
sfd.RestoreDirectory = true;
sfd.Filter = "文本文档|*.txt";
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string dstFilePath = sfd.FileName;
}
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "对话框描述信息";
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string dir = fbd.SelectedPath;
}
指定输出文件的编码方式
StreamWriter s = new StreamWriter(address + "\\History.ini", true, Encoding.GetEncoding("GB2312"));//创建流写入器对象
s.WriteLine(openFileDialog1.FileName);//向文件中写入历史信息
s.Flush();//将信息压入流
s.Close();//关闭流
读取数据的两种方式:
//方式一:逐行读取
StreamReader sr = new StreamReader(address + "\\History.ini", ,Encoding.GetEncoding("gb2312"));//确保中文文本可被识别
while (sr.Peek()>=0)//循环读取流中文本
{
string data = sr.ReadLine());
}
sr.Close();
//方式二:一次性读读取所有行
string[] allLines = System.IO.File.ReadAllLines(filePath);
path类方法及属性
string fileExtend = System.IO.Path.GetExtension(strPath);//得到路径的拓展名
string fileNameE = System.IO.Path.GetFileName(strPath);//得到带拓展名的文件名称
string fileName = System.IO.Path.GetFileNameWithoutExtension(strPath);//无拓展名裸文件名
string fullName = System.IO.Path.GetFullPath(strPath);//得到完整的文件路径
string dirName = System.IO.Path.GetDirectoryName(strPath);//得到目录名
string rndName = System.IO.Path.GetRandomFileName();//随机路径名
File类关键方法及属性
bool isExist = System.IO.File.Exists(strPath);//判断存在性
string access = System.IO.File.GetAccessControl(strPath).ToString() ;//得到权限
string creatTime = System.IO.File.GetCreationTime(strPath).ToString();
string lastWriteTime = System.IO.File.GetLastWriteTime(strPath).ToString();
//System.IO.File.Move(srcFile, dstFile);
//System.IO.File.Copy(srcFile, dstFile, isOverwrite);
//System.IO.File.Create(fileName);
//System.IO.File.Delete(fileName);
可用用于获取文件大小信息,详见C#编程学习26: 获取指定文件或文件夹的大小和占用空间
Directory是一个静态类,不可实例化;DirectoryInfo可以实例化对象
//GetCurrentDirectory:获取应用程序的当前文件目录
string str2 = Directory.GetCurrentDirectory();
//GetDirectoryRoot:获取指定目录中所有子目录的根目录
string str2Root = Directory.GetDirectoryRoot(str2);
bool str2Exists = Directory.Exists(str2);//目录存在性
string dirCreatTime = Directory.GetCreationTime(dirName).ToString();//得到目录创建时间
string[] getAllsons = Directory.GetDirectories(dirName);//得到当前目录的子目录
//Directory.Move(srcDir, dstDir);//目录移动
//Directory.CreateDirectory(dirName);//目录创建
//Directory.Delete(dirName);//目录删除
DirectoryInfo dir = new DirectoryInfo(dirName);
//bool exits = dir.Exists;//是否存在
//dir.Create();//创建目录,不存在就创建时使用
//dir.Delete();//删除目录
string dirExtend = dir.Extension;
string dirFullName = dir.FullName;
DirectoryInfo[] dirDirs = dir.GetDirectories();
FileInfo[] dirFiles = dir.GetFiles();
//dir.MoveTo(dstDir);//移动到
string instanceName = dir.Name;
DirectoryInfo dirFather = dir.Parent;
DirectoryInfo dirRoot = dir.Root;
迭代获取指定目录下满足特定要求的文件
///
/// 根据文件拓展名筛选满足要求的文件
///
///
///
///
private void getFileNameByExtend(string dir, List selFileNames, string fileExtend)
{
string[] fileNames = Directory.GetFiles(dir).Where(x => x.EndsWith(fileExtend)).ToArray();
foreach (string str in fileNames)
{
selFileNames.Add(str);
}
DirectoryInfo[] directs = new DirectoryInfo(dir).GetDirectories();
foreach (DirectoryInfo dr in directs)
{
getFileNameByExtend(dr.FullName, selFileNames, fileExtend);
}
}
应用示例:
C#编程学习13:文件及文件夹检索与拷贝
C#编程学习34:同名不同后缀文件归并到以该名称为父目录的路径下
之前的博文:
C#编程学习28:输入输出型软件界面设计与思考
C#编程学习29:制作可伸缩显示的软件界面
上述两个博文考虑的过于复杂,计算宽度和高度自己都迷糊了,其实可以简化为如下版本:
private void sonFrmcs_Load(object sender, EventArgs e)
{
flowLayoutPanel1.Width = this.Width;
flowLayoutPanel1.Height = this.Height;
splitContainer1.Width = this.Width;
splitContainer1.Height = this.Height;
splitContainer1.Panel2Collapsed = true;
}
private void btnShowHelp_Click(object sender, EventArgs e)
{
if (btnShowHelp.Text == "展开帮助")
{
btnShowHelp.Text = "隐藏帮助";
splitContainer1.Panel2Collapsed = false;
}
else
{
btnShowHelp.Text = "展开帮助";
splitContainer1.Panel2Collapsed = true;
}
}
一个属性:设置AllowDrop为true
两个事件:DragEnter获取鼠标的拖拽效果;DragDrop鼠标拖拽之后的赋值结果
private void textBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Link;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
textBox1.Text = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
}
也为文本框添加鼠标驻留弹出气泡显示文本内容功能
//注意列数不能为空,需要预先指定列;此函数可保证控件内容充满整个控件
void setDgvWidth(DataGridView dgv)
{
dgv.Width = this.Width;
for (int i = 0; i < dgv.ColumnCount; i++)
{
dgv.Columns[i].Width = (dgv.Width - dgv.RowHeadersWidth) / dgv.ColumnCount;
}
}
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.AllowUserToOrderColumns = false;
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
SolidBrush sb = new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.BackColor);
e.Graphics.DrawString((e.RowIndex + 1).ToString(), this.dataGridView1.DefaultCellStyle.Font, sb,
e.RowBounds.Location.X + 5, e.RowBounds.Location.Y + 5);
}
应用示例
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习(20):对比两个mdb文件的图层包含的要素数目是否一致
C#编程学习36:操作SqlSevrer数据库
C#编程学习35:对MDB数据库的操作
C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
C#学习笔记25: 控制台应用程序开发精讲
C#编程学习38:自定义控件--组合控件
C#编程学习39:窗体间参数传递
C#编程学习(04):基本操作学习总结
C#编程学习14:Parrallel.For与for循环的处理效率分析
C#编程学习17:类与对象学习小结
C#学习笔记22: 面向对象编程入门精讲
C#编程学习23:internal关键字的使用
C#编程学习21:修改excel的数据项
C#编程学习27: C#操作Excel从入门到精通
C#编程学习08:Spire Pdf组件的引用,以国际知名期刊OR为例
C#编程学习40:批量下载HTML页面到本地
C#编程学习30:仿Notepad++记事本开发实战
C#编程学习16:清除access中某个数据表的所有数据并重置ID从1自增
C#编程学习15:应用程序帮助文档(chm/pdf)制作与C#调用
C#编程学习(07):自动监测大写键是否被锁定
如果喜欢我的分享,可关注以下两个公众帐号