C#读取文件-古文观止(总结一下)
1,读取单个文件
//读取一个文本文件
private void buttonRead_Click(object sender, EventArgs e)
{
String path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/古文观止随声字幕/0101郑伯克段于鄢.lrc";
FileStream fs = new FileStream(path, FileMode.Open);
StreamReader sr = new StreamReader(fs,Encoding.Default);
string line = "";
while ((line=sr.ReadLine())!= "")
{
string substr = line.Substring(line.IndexOf("["), line.LastIndexOf("]") + );//获取文章中[00.00.05]等字符
line = line.Replace(substr, "");//把文章中[00.00.05]字符替换为“”;注意:替换后需要line接受一下,否则无效果
if (line.Length ==) { //判断是否有汉字;
continue;
}
this.textBox1.Text += line+"\r\n"; //MessageBox.Show(i.ToString());
}
sr.Close();
fs.Close(); }
2,读取古文观止文件夹的下所有文件,生成章节目录
/// <summary>
/// 生成章节目录,取文件夹的第一行内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCreateTitle_Click(object sender, EventArgs e)
{
//1,得到目录下所有文件夹
String path=Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+"/古文观止随声字幕";
DirectoryInfo dinfo = new DirectoryInfo(path);
FileInfo [] files=dinfo.GetFiles();//得到目录下的所有文件
int ContengNum = ;//目录编码
foreach (var item in files)
{
//2,开始读文件
FileStream fs = new FileStream(item.FullName,FileMode.Open);//item.fullname获取文件的完整目录
StreamReader sr = new StreamReader(fs,Encoding.Default);//读的时候记得设置一下编码,否则会出乱码
//this.textBox1.Text += sr.ReadLine()+ContengNum+"\r\n";
string str=sr.ReadLine(); //#判断第一行是否
while (str.Equals(""))
{ //用于判断第一行是否为空,取下一行内容
str = sr.ReadLine();
}
this.textBox1.Text += str.Substring(str.LastIndexOf("]") + ) + "\t" + ContengNum + "\r\n";
sr.Close();
fs.Close();
ContengNum++;
}
}
3,指定目录保存
private void buttonWrite_Click(object sender, EventArgs e)
{
String path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+"/1.doc";
MessageBox.Show(path);
FileStream fs = new FileStream(path, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(this.textBox1.Text);
sw.Flush();
sw.Close();
fs.Close();
MessageBox.Show("ok");
}
重点 推荐下面方式
1,使用控件读取文件夹下文本文件(folderBrowserDialog)
//用于读取
public void openfolder() {
folderBrowserDialog1.ShowDialog(); //子线程无法调用, 估计 this原因
string path = this.folderBrowserDialog1.SelectedPath;//得到文件夹的路径
DirectoryInfo dinfo = new DirectoryInfo(path);
FileInfo[] files = dinfo.GetFiles();
foreach (var item in files)
{
FileStream fs = new FileStream(item.FullName, FileMode.Open);
StreamReader sr = new StreamReader(fs,Encoding.Default);
this.textBox1.Text+= sr.ReadToEnd();//一行一行读得慢,在此使用readtoend;也可以使用readtoline
sr.Close();
fs.Close();
}
}
2,使用控件直接读取文本文件(openFiledialog)
/// <summary>
/// openFileDialog1控件选择文件夹
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
this.openFileDialog1.ShowDialog();//openFileDialog1 选择的是文件夹的所有文本文件 }
/// <summary>
/// 单击“打开”按钮时触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
String path = this.openFileDialog1.FileName;//获取文件路径
FileStream fs = new FileStream(path, FileMode.Open);
StreamReader sr = new StreamReader(fs, Encoding.Default);
this.textBox1.Text = sr.ReadToEnd();//暂时保存到文本框中
sr.Close();
fs.Close();
}
3,多线程读取文件(无法使用上面的this.openfiledialog)-----待修改
private void button4_Click(object sender, EventArgs e)
{
ThreadStart st = new ThreadStart(this.openfolder);//开始方法
//ThreadStart st = new ThreadStart(this.temptest);// 测试ok
Thread t = new Thread(st);
Control.CheckForIllegalCrossThreadCalls=false;//使得子线程可以访问主线程创建的方法
t.Start();
}
小结一下:
1,直接读文本文件: 创建文件流--》读写流--》读写操作--》0k
a, String path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/古文观止随声字幕/0101郑伯克段于鄢.lrc";
FileStream fs = new FileStream(path, FileMode.Open);
StreamReader sr = new StreamReader(fs,Encoding.Default); //注意字符编码
sr.readToEnd(); //或者sr.readToLine();
sr.close();
fs.close();
b, String path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+"/1.doc";
FileStream fs = new FileStream(path, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(this.textBox1.Text);
sw.Flush(); //写的时候flush一下
sw.Close();
fs.Close();
MessageBox.Show("ok");
2,读文件夹 : 获取目录--》创建文件流--》读写流--》读写操作--》0k
String path=Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+"/古文观止随声字幕";
DirectoryInfo dinfo = new DirectoryInfo(path);
FileInfo [] files=dinfo.GetFiles()
foreach (var item in files)
{
FileStream fs = new FileStream(item.FullName,FileMode.Open);//item.fullname获取文件的完整目录
StreamReader sr = new StreamReader(fs,Encoding.Default);
string str=sr.ReadLine();
this.textBox1.Text+=str+"\r\n";
sr.Close();
fs.Close()
}
3, fodlerBrowserDialog读取文件夹;openFileDialog读取文件,点击“打开\保存”时,触发fileOk事件;
4,上述多线程问题解决:(注意:子线程只用结果,而不调用主线程创建的组件;)
1,主线程创建全局变量fpath;
2,赋值后给子线程用;
String fpath = "";//定义全局变量供子线程使用;
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 多线程问题:子线程只用;而不调用主线程创建的组件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
this.folderBrowserDialog1.ShowDialog();
fpath = this.folderBrowserDialog1.SelectedPath;//赋值给全局变量fpath,供子线程使用;
ThreadStart st = new ThreadStart(this.openfolder);//开始方法
Thread t = new Thread(st);
//使得子线程可以访问主线程创建的方法
t.Start();
}
本人菜鸟,老鸟勿喷;
但是可以指点一下,有助菜鸟成长
C#读取文件-古文观止(总结一下)的更多相关文章
- Java 创建文件夹和文件,字符串写入文件,读取文件
两个函数如下: TextToFile(..)函数:将字符串写入给定文本文件: createDir(..)函数:创建一个文件夹,有判别是否存在的功能. public void TextToFile(fi ...
- C#读取文件为byte[]
C#读取文件为byte[] 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// 读取程序生成byte /// </sum ...
- HTML5的File API读取文件信息
html结构: <div id="fileImage"></div> <input type="file" value=" ...
- 关于一些对map和整行读取文件操作
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- 使用java读取文件夹中文件的行数
使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个 ...
- Matlab 读取文件夹中所有的bmp文件
将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...
- JavaWeb中读取文件资源的路径问题
在做javaweb开发的时候,我们可能会需要从本地硬盘上读取某一个文件资源,或者修改某一个文件,这个时候就需要先找到这个文件,然后用FileInputStrem等文件字节.字符流来将这个文件读取到内存 ...
- File API 读取文件小结
简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码. 与以往文件上传不一样,File API不是为了向服务器提交文件设计的. 关于File API不能 ...
- php函数fgets读取文件
如果一个文件比较大,可以考虑用fgets函数 下面是个例子: #文件作用:fgets读取文件 $start_time = microtime(true); $file_name = "a.t ...
随机推荐
- 有意思的RTL函数RegisterClass(在持久化中,你生成的一个新类的对象,系统并不知道他是如何来的,因此需要你注册)good
例子1:Delphi中使用纯正的面向对象方法(这个例子最直接) Delphi的VCL技术使很多程序员能够非常快速的入门:程序员门只要简单的拖动再加上少量的几个Pascal语句,呵呵,一个可以运行得非常 ...
- HDU 5371(2015多校7)-Hotaru's problem(Manacher算法求回文串)
题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...
- 容器LinkedList原理(学习)
一.概述 数据结构和ArrayList有本质不同,LinkedList 是基于链表实现,它的插入和删除操作比 ArrayList 更加高效,基于链表的,所以随机访问的效率要比 ArrayList 差. ...
- struts2 下载
struts 官网 : https://struts.apache.org/
- CANopen——总线基本知识
1. 总线标准 2. 获取索引和子索引 2fh,2bh,23h,40h等,是不是对应cs的不同值: 主站1280h的对象字典?1280h-sub2,得到client的COB-ID值: 根据收到的m-& ...
- OTN / SONET / SDH
①OTN(光传送网,OpticalTransportNetwork),是以波分复用技术为基础.在光层组织网络的传送网,是下一代的骨干传送网; ②SONET (Synchronous Optical N ...
- ThinkAndroid框架
ThinkAndroid简介 ThinkAndroid是一个免费的开源的.简易的.遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单.快速的进行 Android应用程序的开发,包 ...
- 解决 django 中 mysql gone away 的问题
最近在项目中,我使用 Django Command 模块写了一个脚本,处理从 MQ 发来的消息,并入库.在测试过程中,程序运行良好,但是在程序上线并运行一段时间后,出现了以下错误: Operation ...
- Flask的jinja2模板中自定义过滤器的使用
大部分的模板引擎都是支持过滤器功能的,jinja2也不例外,它提供了丰富的内置过滤器,但是有些时候还是没办法满足我们的需求,好在jinja2支持自定义过滤器,下面是一个简单的例子. 下面的例子完成了自 ...
- 深入理解JMM(Java内存模型) --(三)顺序一致性
数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.Java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序. 当代码 ...