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>
}
}
效果如下图所示: