文件流的使用

10 篇文章 0 订阅
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;

namespace WebApplication1.Controllers
{
    public class FileStreamController : Controller
    {
        // GET: FileStream
        /// <summary>
        /// 获取指定目录下的文件
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            string filePath = Server.MapPath("~" + "/Files");
            DirectoryInfo dirInfo = new DirectoryInfo(filePath);
            //FileInfo[] file = dirInfo.GetFiles();//读取所有文件
            FileInfo[] file = dirInfo.GetFiles("*.txt");//读取指定类型的文件
            Dictionary<string, string> dic = new Dictionary<string, string>();
            foreach (var item in file)
            {
                string name = item.Name;//文件名称
                int index = name.LastIndexOf('.');
                string fileName = name.Substring(0, index);
                dic.Add(name, fileName);//item.FullName  该文件的完整目录
            }
            ViewBag.dic = dic;//传值到页面
            return View(dic);
        }

       /// <summary>
       /// 读取文件内容
       /// </summary>
       /// <param name="fileName">文件名称  有带后缀哟</param>
       /// <returns></returns>
        public ActionResult ReadContent(string fileName)
        {
            string filePath = Server.MapPath("~" + "/Files/" + fileName);
            //通过文件路径获取文件内容
            FileStream fs = new FileStream(filePath, FileMode.Open);
            //借助直接获取字符串的流  ps:文本编码不能使用UTF8 使用UTF8会乱码
            StreamReader reader = new StreamReader(fs, System.Text.Encoding.Default);
            List<string> contentList = new List<string>();
            //循环读取文件内容
            while (reader.EndOfStream == false)//reader.EndOfStream  判断当前流的位置是否在文件流的末尾
            {
                string content = reader.ReadLine();//读取一行文件数据
                contentList.Add(content);
            }
            ViewData["contentList"] = contentList;
            int index = fileName.LastIndexOf('.');
            ViewData["fileName"] = fileName.Substring(0, index);
            //ViewData["contnet"]= reader.ReadToEnd();//读取文件的内容  缺点:不会换行  
            //关闭流
            reader.Close();
            fs.Close();
            return View();
        }

        /// <summary>
        /// 读取文件内容
        /// </summary>
        /// <param name="fileName">文件名称  有带后缀哟</param>
        /// <returns></returns>
        public ActionResult ReadContent2(string fileName)
        {
            string filePath = Server.MapPath("~" + "/Files/" + fileName);
            List<string> contentList = new List<string>();
            //通过文件路径获取文件内容         
            using (FileStream fs = new FileStream(filePath, FileMode.Open))
            {
                //借助直接获取字符串的流
                using (StreamReader reader = new StreamReader(fs, System.Text.Encoding.Default))
                {
                    //循环读取文件内容
                    while (reader.EndOfStream == false)//reader.EndOfStream  判断当前流的位置是否在文件流的末尾
                    {
                        string content = reader.ReadLine();//读取一行文件数据
                        contentList.Add(content);
                    }
                }
            }
            ViewData["contentList"] = contentList;
            int index = fileName.LastIndexOf('.');
            ViewData["fileName"] = fileName.Substring(0, index);
            //ViewData["contnet"]= reader.ReadToEnd();//读取文件的内容  缺点:不会换行  
            return View();
        }

        /// <summary>
        /// 创建文件并写入文件内容
        /// </summary>
        /// <returns></returns>
        public ActionResult WriteContent()
        {
            string fileName = DateTime.Now.AddDays(2).ToLongDateString() + ".txt";
            string filePath = Server.MapPath("~" + "/Files/" + fileName);     //文件路径
            #region 判断是否存在该文件
            判断是否存在该文件
            //if (!System.IO.File.Exists(filePath))
            //{
            //    //DirectoryInfo dirInfo = new DirectoryInfo(filePath);
            //    //dirInfo.Create();//创建目录 
            //    //Directory.CreateDirectory(filePath);//创建该文件夹下的所有目录及子目录
            //    System.IO.File.CreateText(filePath);//创建一个文本
            //}
            #endregion

            //创建文件流   FileMode.OpenOrCreate  有就打开,没有就创建
            FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate);
            #region 直接写入文件文件内容会被覆盖
            创建写入器,将文件流传入写入器
            //StreamWriter write = new StreamWriter(fs);
            //{
            //    write.WriteLine("时间:"+DateTime.Now);
            //    write.WriteLine("内容:"+"laall");
            //    write.WriteLine("-----------------------------------");
            //}
            //write.Close();
            #endregion
            fs.Close();
            //追加内容到现有文件或新文件
            StreamWriter write = System.IO.File.AppendText(filePath);
            write.WriteLine("时间:" + DateTime.Now);
            write.WriteLine("内容:" + "laall");
            write.WriteLine("-----------------------------------");
            write.Close();

            return View();
        }
    }
}

获取指定目录下的文件页面代码:


@{
    ViewBag.Title = "Index";
    Dictionary<string, string> dic = ViewBag.dic;
}
@model   System.Collections.Generic.Dictionary<string, string>


<h4>model传值方式</h4>
@{
    foreach (var item in Model)
    {
        <div><a href="~/FileStream/ReadContent?fileName=@item.Key">@item.Value</a></div>
    }
}
<hr />
<h4>ViewBag传值方式</h4>
@{
    foreach (var item in dic)
    {
        <div><a href="~/FileStream/ReadContent?fileName=@item.Key">@item.Value</a></div>
    }
}

 

 

读取文件内容页面代码:


@{
    ViewBag.Title = "ReadContent";
    // var contnet = ViewData["contnet"];
    List<string> contentList = ViewData["contentList"] as List<string>;
    string fileName = ViewData["fileName"].ToString();
}

<h4>@fileName</h4>
@*<div>@contnet</div>*@
@{ 
    foreach (var item in contentList)
    {
        <div>@item</div>
    }
}

效果如下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值