C# WPF读取文本内容的7种方式

这篇具有很好参考价值的文章主要介绍了C# WPF读取文本内容的7种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

C#读取文本内容的7种方式


一、界面展示

C# WPF读取文本内容的7种方式

二、使用步骤

1.引入库

代码如下(示例):

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static System.Net.Mime.MediaTypeNames;

2.界面代码

代码如下(示例):文章来源地址https://www.toymoban.com/news/detail-477823.html

<Window x:Class="ReadFileDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ReadFileDemo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Label Grid.Row="0" Grid.Column="0" Content="选择文件" VerticalAlignment="Center" HorizontalAlignment="Center"></Label>
        <TextBox Grid.Row="0" Grid.Column="1" x:Name="tbFileName" Text="C:\Users\beango.cheng\Desktop\Barcode系统.txt" VerticalContentAlignment="Center" VerticalAlignment="Center" Height="30" Margin="10 0 80 0"></TextBox>
        <Button Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right" Width="60" Height="30" Margin="5" Content="选择" Click="SelectButton_OnClick"></Button>
        <RichTextBox Grid.Row="1" Grid.Column="1" Grid.RowSpan="10" Name="txtRichTextBox" Margin="10 5 5 5"></RichTextBox>       
        <Button Grid.Row="1" Grid.Column="0"  Margin="10 5" Content="第一种方式" Click="ReadFileButton1_OnClick"></Button>
        <Button Grid.Row="2" Grid.Column="0"  Margin="10 5" Content="第二种方式" Click="ReadFileButton2_OnClick"></Button>
        <Button Grid.Row="3" Grid.Column="0"  Margin="10 5" Content="第三种方式" Click="ReadFileButton3_OnClick"></Button>
        <Button Grid.Row="4" Grid.Column="0"  Margin="10 5" Content="第四种方式" Click="ReadFileButton4_OnClick"></Button>
        <Button Grid.Row="5" Grid.Column="0"  Margin="10 5" Content="第五种方式" Click="ReadFileButton5_OnClick"></Button>
        <Button Grid.Row="6" Grid.Column="0"  Margin="10 5" Content="第六种方式" Click="ReadFileButton6_OnClick"></Button>
        <Button Grid.Row="7" Grid.Column="0"  Margin="10 5" Content="第七种方式" Click="ReadFileButton7_OnClick"></Button>
    </Grid>
</Window>

3.后台代码

(1)打开文件

		private void SelectButton_OnClick(object sender, RoutedEventArgs e)
        {
            this.txtRichTextBox.Document.Blocks.Clear();
            AppendTestData("选择文件", MyBrushes.PASS);

            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Title = "选择文件";

            openFileDialog.Multiselect = false;//选择多个文件

            openFileDialog.RestoreDirectory = true;//跟踪上次打开的文件的目录

            openFileDialog.Filter = "Text files(*.txt) | *.txt";

            if (openFileDialog.ShowDialog() == true)
            {
                tbFileName.Text = openFileDialog.FileName;
            }

        }

(2)第一种:基于FileStream,并结合它的Read方法读取指定的字节数组,最后转换成字符串进行显示。

    private void ReadFileButton1_OnClick(object sender, RoutedEventArgs e)
    {
        this.txtRichTextBox.Document.Blocks.Clear();

        AppendTestData("第一种:基于FileStream,并结合它的Read方法读取指定的字节数组,最后转换成字符串进行显示。", MyBrushes.Yellow);

        FileStream fs = new FileStream(this.tbFileName.Text, FileMode.Open, FileAccess.Read);
        int n = (int)fs.Length;
        byte[] b = new byte[n];
        int r = fs.Read(b, 0, n);
        fs.Close();
        string txtFileContent = Encoding.UTF8.GetString(b, 0, n);

        AppendTestData(txtFileContent, MyBrushes.Green);
    }

(3)第二种:基于FileStream,一个字节一个字节读取,放到字节数组中,最后转换成字符串进行显示。

	private void ReadFileButton2_OnClick(object sender, RoutedEventArgs e)
    {
        this.txtRichTextBox.Document.Blocks.Clear();

        AppendTestData("第二种:基于FileStream,一个字节一个字节读取,放到字节数组中,最后转换成字符串进行显示。", MyBrushes.Yellow);

        FileStream fs = new FileStream(this.tbFileName.Text, FileMode.Open, FileAccess.Read);
        long n = fs.Length;
        byte[] b = new byte[n];
        int data, index;
        index = 0;
        data = fs.ReadByte();
        while (data != -1)
        {
            b[index++] = Convert.ToByte(data);
            data = fs.ReadByte();
        }
        fs.Close();
        string txtFileContent = Encoding.UTF8.GetString(b);

        AppendTestData(txtFileContent, MyBrushes.Green);
    }

(4)第三种:基于File类,直接全部读取出来并显示。

	private void ReadFileButton3_OnClick(object sender, RoutedEventArgs e)
	{
	    this.txtRichTextBox.Document.Blocks.Clear();
	
	    AppendTestData("第三种:基于File类,直接全部读取出来并显示。", MyBrushes.Yellow);
	
	    string txtFileContent = System.IO.File.ReadAllText(tbFileName.Text);
	
	    AppendTestData(txtFileContent, MyBrushes.Green);
	}

(5)第四种:基于StreamReader类,一行一行读取,最后拼接并显示。

 	private void ReadFileButton4_OnClick(object sender, RoutedEventArgs e)
    {
        this.txtRichTextBox.Document.Blocks.Clear();

        AppendTestData("第四种:基于StreamReader类,一行一行读取,最后拼接并显示。", MyBrushes.Yellow);

        StreamReader sr = new StreamReader(this.tbFileName.Text, Encoding.UTF8);
        string line = sr.ReadLine();
        while (line != null)
        {
            AppendTestData(line, MyBrushes.Green);
            line = sr.ReadLine();
            //if (line != null)
            //{
            //    this.rtb_Content.AppendText("\r\n");
            //}
        }
        sr.Close();
    }

(6) 第五种:基于StreamReader类,一次读到结尾,最后显示

  	private void ReadFileButton5_OnClick(object sender, RoutedEventArgs e)
    {
        this.txtRichTextBox.Document.Blocks.Clear();
        AppendTestData("第五种:基于StreamReader类,一次读到结尾,最后显示。", MyBrushes.Yellow);
        StreamReader sr = new StreamReader(this.tbFileName.Text, Encoding.UTF8);
        string txtFileContent = sr.ReadToEnd();
        sr.Close();

        AppendTestData(txtFileContent, MyBrushes.Green);
    }

(7)第六种:基于StreamReader类,一行一行读取,通过EndOfStream判断是否到结尾,最后拼接并显示

 private void ReadFileButton6_OnClick(object sender, RoutedEventArgs e)
    {
        this.txtRichTextBox.Document.Blocks.Clear();
        AppendTestData("第六种:基于StreamReader类,一行一行读取,通过EndOfStream判断是否到结尾,最后拼接并显示。", MyBrushes.Yellow);

        StreamReader sr = new StreamReader(this.tbFileName.Text, Encoding.UTF8);

        //while (!sr.EndOfStream)
        //{
        //    AppendTestData(sr.ReadLine(),MyBrushes.Green);

        //}
        string txtFileContent = string.Empty;
        while (!sr.EndOfStream)
        {
             txtFileContent += sr.ReadLine();

            if (!sr.EndOfStream)
            {
                txtFileContent += "\r\n";
            }
        }

        sr.Close();

        AppendTestData(txtFileContent, MyBrushes.Green);
    }

(8)第七种:基于FileStream和 StreamReader类来实现

 private void ReadFileButton7_OnClick(object sender, RoutedEventArgs e)
    {
        this.txtRichTextBox.Document.Blocks.Clear();
        AppendTestData("第七种:基于FileStream和 StreamReader类来实现。", MyBrushes.Yellow);
        FileStream fs = new FileStream(this.tbFileName.Text, FileMode.Open, FileAccess.Read);
        StreamReader sr = new StreamReader(fs, Encoding.UTF8);
        string txtFileContent = sr.ReadToEnd();
        fs.Close();
        sr.Close();

        AppendTestData(txtFileContent, MyBrushes.Green);
    }

(9)打印代码

	public enum MyBrushes : uint
    {
        Black = 0xFF000000,
        White = 0xFFFFFFFF,
        Red = 0xFFBF1818,
        Green = 0xFF28B028,
        Blue = 0xFF2880D8,
        Yellow = 0xFFD8B628,
        IDLE = 0x88237380,
        PASS = 0x882DB96D,
        FAIL = 0x88CB1111,
        TESTING = 0x88876918,
        RichBlue = 0xFF0098FF,
        RichGreen = 0xFF1ACB62,
        RichRed = 0xFFFB4B4B,
        RichYellow = 0xFFEE9617
    }
	private Block AppendTestData(string data,MyBrushes myBrushes)
    {
        Block block = null;

        if(this.Dispatcher.Thread == System.Threading.Thread.CurrentThread)
        {
            block = GetBlock(data, myBrushes);
            this.txtRichTextBox.Document.Blocks.Add(block);
        }
        else
        {
            this.Dispatcher.Invoke((Action)delegate
            {
                block = AppendTestData(data, myBrushes);
            });
        }

        return block;
    }

    private Block GetBlock(string data,MyBrushes myBrushes)
    {
        Inline inline = new Run(data);

        inline.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString(myBrushes.ToBrushString()));

        return new Paragraph(inline)
        {
            LineHeight = 1.0
        };
    }

(10)System 扩展方法

namespace System
{
    public static partial class ExpandClass
    {
        public static string ToBrushString(this Enum e)
        {
            return "#" + Convert.ToUInt32(e).ToString("X2");
        }
    }
}

到了这里,关于C# WPF读取文本内容的7种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HTML】标签读取富文本编辑器的内容

    1.正确读取富文本内容示例: 代码:  显示结果:  在这个例子中, {$row.content}  是直接输出从数据库中获取的富文本内容,包括可能存在的HTML标签和属性,这样可以确保富文本能够按照预期样式呈现。 2. 错误读取富文本内容示例及其原因分析:  代码:  显示结果: 分析

    2024年02月02日
    浏览(49)
  • Unity 数据读取|(二)多种方式读取文本文件

    在Unity3D中,我们经常会需要在本地或者服务器上读取游戏数据,Unity中读取文件的方式有很多种,写下此文章以做总结。 TextAsset是Unity 提供的一个文本对象,它可以通过 Resources.Load 或者 AssetBundle 来读取数据。 它支持读取的文本格式包括 . txt .html .htm .bytes .json .csv .yaml .fnt 。

    2024年02月04日
    浏览(78)
  • 界面控件DevExpress WinForms/WPF v23.2 - 富文本编辑器支持内容控件

    众所周知内容控件是交互式UI元素(文本字段、下拉列表、日期选择器),用于在屏幕上输入和管理信息。内容控件通常在模板/表单中使用,以标准化文档格式和简化数据输入。DevExpress文字处理产品库(Word Processing Document API、WinForm和WPF富文本编辑器)附带了内容控制支持(v23

    2024年04月15日
    浏览(51)
  • 技术分享:PHP读取TXT文本内容的五种实用方法

    在Web开发中,我们经常需要读取和处理文本文件。PHP作为一种流行的服务器端脚本语言,提供了多种方法来读取TXT文本内容。本文将介绍五种不同的PHP教程,帮助您学习如何使用PHP读取TXT文本内容。PHP读取文件内容在实际开发当中,还是比较常见的,所以今天我就给大家分享

    2024年01月18日
    浏览(45)
  • C#修改富文本框(RichTextBox)指定内容颜色

    最近给客户做了一个协议解包与组包的工具,以便于他们给终端客户或者集成商使用,让客户能够快速集成产品协议,降低客户集成工作量,产品协议是基于JT/T808,但是有增加了自己的一些特殊修改。 客户使用的是C#开发的网关,所以我就基于C#做了一个开发包以及测试工具

    2023年04月15日
    浏览(36)
  • c#关于文件夹/文件/文本读取遍历,写入还有表格的读取的一些方法

    c#遍历文件夹下的各种文件 将一些log写入到文本文件中: fs.Seek(offset, whence);移动文件读取的指针到指定位置 offset:开始的偏移量,也就是代表需要移动偏移的字节数 whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始

    2024年02月01日
    浏览(59)
  • JAVA读取(DOC、DOCX、PDF、PPT、PPTX)文件文本内容及图片

    温馨提示:有很多方法均可以解析这些常见的文件,以下内容使用的是apache-poi + apache-pdfbox实现的。         关于文档解析,在网上搜索了很久,无奈内容太过繁杂,找不到合适的代码,一大半都是只支持文本。没办法,只能自己在网上一点一点CV了,最终提取了这些代码

    2024年02月03日
    浏览(51)
  • C#读取加载文件中的内容并修改保存

    在编写unity程序时,需要将配置文件中的内容需要读取加载到软件中,因此需要根据文件的相对路径来读取文件中的内容。代码如下: 将加载显示的数据进行修改后,在重新保存到文件中,代码如下: 字符串数组中存放,每一行需要保存的文件内容。

    2024年02月14日
    浏览(53)
  • C# WPF: Imag图片填充方式有哪些?

    C#和WPF中的图像填充方式 在WPF中,你可以使用 Image 控件来显示图像,并使用不同的填充方式来控制图像在控件中的显示方式。以下是一些常见的图像填充方式: Stretch(拉伸):这是默认的填充方式,它会拉伸图像以充满整个 Image 控件。这可能导致图像的宽高比失真。 Unif

    2024年02月07日
    浏览(35)
  • C# 读取Excel的几种常见方式及实现步骤

    目录 1.使用 Microsoft Office Interop Excel 库 2.使用 OLEDB 数据库连接方式 3. 使用 EPPlus 库 在 C# 中,我们可以使用以下几种方式将 Excel 文件中的数据读取到 DataTable 中: 1.使用 Microsoft Office Interop Excel 库 这种方法需要安装 Microsoft Office,并且性能较低。具体实现步骤如下: 2.使用 O

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包