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#读取文件-古文观止(总结一下)的更多相关文章

  1. Java 创建文件夹和文件,字符串写入文件,读取文件

    两个函数如下: TextToFile(..)函数:将字符串写入给定文本文件: createDir(..)函数:创建一个文件夹,有判别是否存在的功能. public void TextToFile(fi ...

  2. C#读取文件为byte[]

    C#读取文件为byte[] 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// 读取程序生成byte /// </sum ...

  3. HTML5的File API读取文件信息

    html结构: <div id="fileImage"></div> <input type="file" value=" ...

  4. 关于一些对map和整行读取文件操作

    public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...

  5. 使用java读取文件夹中文件的行数

    使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个 ...

  6. Matlab 读取文件夹中所有的bmp文件

    将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...

  7. JavaWeb中读取文件资源的路径问题

    在做javaweb开发的时候,我们可能会需要从本地硬盘上读取某一个文件资源,或者修改某一个文件,这个时候就需要先找到这个文件,然后用FileInputStrem等文件字节.字符流来将这个文件读取到内存 ...

  8. File API 读取文件小结

    简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码. 与以往文件上传不一样,File API不是为了向服务器提交文件设计的. 关于File API不能 ...

  9. php函数fgets读取文件

    如果一个文件比较大,可以考虑用fgets函数 下面是个例子: #文件作用:fgets读取文件 $start_time = microtime(true); $file_name = "a.t ...

随机推荐

  1. AWK学习总结(三) Records and Fields

    AWK 记录和域 The NR Variable % awk '{print NR, $0}' employees 1 Tom Jones 4424 5/12/66 543354 2 Mary Ada ...

  2. android简易双屏支持【转】

    本文转载自:http://blog.csdn.net/sfrysh/article/details/7463339 抱歉,之前说xorg的exa更新的时候恐怕一直不会更新了,没有做xorg开发了.转向 ...

  3. Wedding(2-SAT)

    传送门 稍微复杂一点的2-SAT. 读题之后发现有以下限制: 1.每一对夫妻(包括新郎和新娘)不能坐在桌子的一侧. 2.对于一些给定的非法(自行脑补)的关系,这两个人不能坐在新娘的同一侧. 因为每个人 ...

  4. CodeFirst建模:DataAnotation

    示例一 新建一个控制台应用程序,并安装entityframework 新建一个文件Blog.cs类,输入以下代码: using System.ComponentModel.DataAnnotation ...

  5. bzoj2157 旅游——LCT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 仍然是LCT模板题~ 不过有一些需要注意的地方,点和边的区分,0号点的 mx 和 mn ...

  6. SVN 打补丁 Apply Patch ***

    SVN补丁的方式,在不能连接服务器或者没有修改的权限,但是迫于形势,你又必须对这个文件进行修改,这时你就可以用Create patch创建补丁,然后把你创建的补丁发给项目人,或对此目录有写权限的工作人 ...

  7. 【WIP】C基础语法

    创建: 2017/06/17 更新: 2017/10/14 标题加上[WIP],增加创建时间 更新: 2018/02/05 被Objective-C引用部分加上id方便链接,代码放进代码模板      ...

  8. bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚【贪心+堆||差分】

    这个题方法还挺多的,不过洛谷上要输出方案所以用堆最方便 先按起始时间从小到大排序. 我用的是greater重定义优先队列(小根堆).用pair存牛棚用完时间(first)和牛棚编号(second),每 ...

  9. 【杂谈】HTML5到底给了我们什么?迟到的2016年终总结

    其实提笔的时候日期已经到了3月了,不过由于在过去的2016年笔者发生了蛮多的事情,所以还是决定记录一下,那些关于成长的片段. 其实HTML5是在2012年的时候接触的,当时和结果志趣相投的同事,看到了 ...

  10. RHEL5.6更新yum源

    RHEL5.6更新yum源记录,2017年2月20日 root用户切换目录至:/etc/yum.repos.d/ [root@localhost yum.repos.d]# pwd /etc/yum. ...