首页 > 其他分享 >今日份主要内容:目录类,文件流相关类

今日份主要内容:目录类,文件流相关类

时间:2024-08-17 19:26:25浏览次数:14  
标签:文件 string listView1 Text private 文件夹 内容 new 目录

今日份主要内容:目录类,文件流相关类

  1. 目录类:Directory类,DirectoryInfo类

  2. 文件的输入与输出类:FileStream类,MemoryStream类,StreamReader类,StreamWriter类,StringReader类,StringWriter类

目录类

窗体的设计

1723887549843

窗体设置


private string selectedPath = string.Empty;
//想调用其他方法里的变量,可以在全局定义一个私有属性,然后在方法里存下来那个变量,在其它方法里就可以用了。

public Form1()
{
    InitializeComponent();

    listView1.Columns.Add("名称", 250, HorizontalAlignment.Left);
    listView1.Columns.Add("修改日期", 300, HorizontalAlignment.Left);
    listView1.View = View.Details;//按照详细信息的设置显示出来
}

打开文件夹


private void button1_Click(object sender, EventArgs e)
{
    FolderBrowserDialog dialog = new FolderBrowserDialog();
    DialogResult dialogResult = dialog.ShowDialog();
    if (dialogResult == DialogResult.OK)
    {
        selectedPath = dialog.SelectedPath; // 把选择的目录记录下来
        LoadFolder(dialog.SelectedPath);
    }
}

加载文件夹的函数


private void LoadFolder(string selectedPath)
 {
     listView1.Items.Clear();
     
     DirectoryInfo directoryInfo = new DirectoryInfo(selectedPath);
     DirectoryInfo[] folders = directoryInfo.GetDirectories();
     foreach (var folder in folders)
     {
         if ((folder.Attributes & FileAttributes.Hidden) > 0) continue;
         ListViewItem listViewItem = new ListViewItem(folder.Name);
         listViewItem.SubItems.Add(folder.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"));

         listView1.Items.Add(listViewItem);
     }
 }

创建文件夹


private void button2_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count == 0)
    {
        MessageBox.Show("请选择文件夹,再创建子文件夹");
        return;
    }

    if (listView1.SelectedItems.Count > 1)
    {
        MessageBox.Show("只能选择一个文件夹");
        return;
    }

    // 拿listView1控件选中的某项,目的拿到文件夹的名称:selectedItem.Text
    ListViewItem selectedItem = listView1.SelectedItems[0];
    // 合并一个完整的路径,包括:盘符,选中的文件夹,新文件夹的名称
    string fullPath = Path.Combine(selectedPath, selectedItem.Text, textBox1.Text);

    DirectoryInfo directoryInfo = new DirectoryInfo(fullPath);
    if (!directoryInfo.Exists)
    {
        directoryInfo.Create();
    }

    string parentPath = Path.Combine(selectedPath, selectedItem.Text);
    LoadFolder(parentPath);
}

创建子文件夹


private void button3_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count == 0)
    {
        MessageBox.Show("请选择文件夹,再创建子文件夹");
        return;
    }

    if (listView1.SelectedItems.Count > 1)
    {
        MessageBox.Show("只能选择一个文件夹");
        return;
    }

    ListViewItem selectedItem = listView1.SelectedItems[0];

    string folderPath = Path.Combine(selectedPath, selectedItem.Text);
    DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);
    directoryInfo.CreateSubdirectory(textBox1.Text);

    LoadFolder(folderPath);
}

移动文件夹


private void button4_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count == 0)
    {
        MessageBox.Show("请选择文件夹,再创建子文件夹");
        return;
    }

    if (listView1.SelectedItems.Count > 1)
    {
        MessageBox.Show("只能选择一个文件夹");
        return;
    }

    ListViewItem selectedItem = listView1.SelectedItems[0];
    string sourceDirName = Path.Combine(selectedPath, selectedItem.Text);
    DirectoryInfo directoryInfo = new DirectoryInfo(sourceDirName);
    string parentPath = directoryInfo.Parent.Parent.FullName;
    string destDirName = Path.Combine(parentPath, selectedItem.Text);

    Directory.Move(sourceDirName, destDirName);

    LoadFolder(parentPath);
}

移除文件夹

 
   private void button5_Click(object sender, EventArgs e)
  {
      if (listView1.SelectedItems.Count == 0)
      {
          MessageBox.Show("请选择文件夹,再创建子文件夹");
          return;
      }

      if (listView1.SelectedItems.Count > 1)
      {
          MessageBox.Show("只能选择一个文件夹");
          return;
      }

      ListViewItem selectedItem = listView1.SelectedItems[0];
      string sourceDirName = Path.Combine(selectedPath, selectedItem.Text);

      DirectoryInfo directoryInfo = new DirectoryInfo(sourceDirName);
      directoryInfo.Delete(); // 参数true时,可以删除子文件夹及文件

      LoadFolder(selectedPath);
  }

文件流相关类

C#语言中主要包括三种流:文件流FileStream内存流MemoryStream网络流NetworkStream。流:语言中数据的一种形式。

普通文件流FileStream

  
  private void button1_Click(object sender, EventArgs e)
  {
      OpenFileDialog openFileDialog = new OpenFileDialog();
      if (openFileDialog.ShowDialog() == DialogResult.OK)
      {
          string path = openFileDialog.FileName;
          using (FileStream fs = new FileStream(path, FileMode.Open))
          {
              // fs.Length流的长度(流中数据的字节数)
              byte[] array = new byte[fs.Length];
              fs.Read(array, 0, array.Length);
              
              //Encoding.GetEncoding("UTF-8")

              richTextBox1.Text = Encoding.UTF8.GetString(array);
              fs.Close();// 可省略
          }
      }
  }

异步读取FileStream


// 方法前添加async关键字,称为异步方法
// await关键字必须配合async关键字来使用。
// 多线程:Thread, ThreadPool, Task, Task<T>
// 异步:BeginXXX配合EndXXX, async结尾,async/await
private async void button2_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        string path = openFileDialog.FileName;

        byte[] array;
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            array = new byte[fs.Length];
            await fs.ReadAsync(array, 0, array.Length);
        }

        richTextBox1.Text = Encoding.UTF8.GetString(array);
    }
}

内存流MemoryStrem


private void button3_Click(object sender, EventArgs e)
{
    // 定义一个字符串
    string str = "hello world中国";
    // 把字符串转换成字节数组
    byte[] buffer = Encoding.UTF8.GetBytes(str);
    // 定义一个新的字节数组,用来从流中读取数据,存储到新的字节数组中
    byte[] readBuffer = new byte[buffer.Length];
    // 实例化流时,把字节数组通过流的构造函数放到流中。
    using (MemoryStream ms = new MemoryStream(buffer))
    {
        ms.Read(readBuffer, 0, readBuffer.Length);

        string readStr = Encoding.UTF8.GetString(readBuffer);
        richTextBox1.Text = readStr;
    }
}

MemoryStream(写)


MemoryStream ms = null;
private void button4_Click(object sender, EventArgs e)
{
    // buffer缓冲区
    /*byte[] buffer = Encoding.UTF8.GetBytes(textBox1.Text);
    ms = new MemoryStream(buffer);  // 实例化,带数据*/

    byte[] buffer = Encoding.UTF8.GetBytes(textBox1.Text);
    ms = new MemoryStream(); // 不带数据
    ms.Write(buffer, 0, buffer.Length);// 把buffer字节数组中数据写入流
    // 在读取或写入数据后,需要重置MemoryStream,以便重新使用,可以使用Seek方法将MemoryStream的位置重置为起始位置
    ms.Seek(0, SeekOrigin.Begin);
    //ms.Position = 0;
    // 切记:此处流不能关闭。
}

MemoryStream(读)


private void button5_Click(object sender, EventArgs e)
{
    if (ms == null) return;
    byte[] buffer = new byte[ms.Length];
    ms.Read(buffer, 0, buffer.Length);
    ms.Close();
    richTextBox1.Text = Encoding.UTF8.GetString(buffer);
}

StreamWriter


private void button6_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        string path = openFileDialog.FileName;
        using (StreamWriter sw = new StreamWriter(path))
        {
            sw.WriteLine("HELLO WORLD");
            sw.WriteLine("中文");
        }
    }
}

StreamReader


private void button7_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        string path = openFileDialog.FileName;
        // 重命名快捷键:ctrl+r+r
        using (StreamReader sr = new StreamReader(path))
        {
            richTextBox1.Text = sr.ReadToEnd();
        }
    }
}

StringWriter


private void button9_Click(object sender, EventArgs e)
{
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("hello world中文1");
    sb.AppendLine("hello world中文2");

    // StringWriter写入流,StringReader读取流
    using (StringWriter sw = new StringWriter(sb))
    {
        sw.WriteLine("hello world中文3");
    }

    // 读取
    using (StringReader sr = new StringReader(sb.ToString()))
    {
        string result = sr.ReadToEnd();
        richTextBox1.Text = result;
    };
}

StringReader


private void button8_Click(object sender, EventArgs e)
{
    StringReader sr = new StringReader("fdsfdds");
    string result = sr.ReadToEnd();
    richTextBox1.Text = result;
}

规律

  • 方法上带s结尾的基本上都是返回集合。
  • 以is,has,contains结尾的返回bool值。

标签:文件,string,listView1,Text,private,文件夹,内容,new,目录
From: https://www.cnblogs.com/dbsdb/p/18364860

相关文章

  • 任意文件读取与下载的原理及修复
     原文链接:https://cloud.tencent.com/developer/article/1597942原理没有对读取下载的文件做限制漏洞利用方式由于我们不知道敏感文件的路径,我们可以利用../../(返回上次目录)依次猜解,让漏洞利用变的猥琐。例如漏洞的危害:通过任意文件下载,可以下载服务器的任意文件,web业......
  • 用whl文件安装Anaconda中的GDAL
      本文介绍在Anaconda环境下,基于.whl文件安装Python中高级地理数据处理库GDAL的方法。  在之前的文章中,我们介绍了基于condainstall命令直接联网安装GDAL库的方法;但如下图所示,这一方法的环境配置过程非常慢,而且有时候还会出现不同第三方库之间的冲突,因此并不是一个很好的方......
  • application.yml文件配置springboot项目
    基本用法#注意空格都不能省#配置端口号server:port:8080address:127.0.0.1#配置数据库spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/tliasusername:rootpassword:root#定义对象/Ma......
  • DzzOffice修改权限判断方式解决另存为窗口新建文件无权限问题
    在执行另存为操作并选择文件与位置时,如提示无权限问题,此现象源于权限判断方式存在差异。为解决此问题,以在另存为窗口新建文件时提示无权限问题为例进行阐述。打开\dzz\system\fileselection\ajax.php文件。找到elseif($operation=='newIco'){//新建文件将perm_ch......
  • Linux学习之文件操作
    程序点击查看代码/*创建命令行参数输入名字的文件存储用户输入的学生姓名年龄和成绩*/#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>structStude......
  • Java后端实现ppt格式转为pdf格式文件
    (1)使用场景:将从web前端上传到后端的ppt格式的文件转换为pdf格式的文件。项目框架为springboot+layui(2)实现方法:1、步骤1:导入所需jar包,如下<!--ppt转pdf--><dependency><groupId>com.aspose</groupId><artifactId>aspose-word</artifactId><version>18.10&l......
  • FastReport Net 自动把excel数据文件转为打印模版
    给FastReportNet报表工具补充了一个功能。自动生成模版,然后再用Designer精细调整。很方便。privatevoidbutton5_Click(objectsender,EventArgse){pReport=newReport();//实例化一个Report报表//registeralldatatablesandrelationspReport.RegisterData(ds)......
  • Linux学习笔记:systemd配置文件
    本文更新于2024-08-15,使用systemd252,操作系统为Debian12.6(bookworm)。以为Nginx编写配置文件为例,配置文件路径为/lib/systemd/system/nginxd.service(亦即服务名为nginxd),所有者为root,权限通常为0644。文件内容如下:[Unit]Description=NginxAfter=network.target[Service]......
  • 易优cms网站基本内容设置 后台 — 网站首页 — 页面设置
    关闭网站:默认选择“否”,如果维护,备案或其他原因,可以切换为“是”即可快捷闭站;网站名称:一般以公司名称或主推产品服务命名,例如:易优CMS或赞赞网络;网站LOGO:需要可以上传或替换logo图片,建议上传和前台当前LOGO尺寸大小一致的图片文件。地址栏图标:需要是.ico格式的文件,可以直......
  • C#文件列表
    C#文件列表窗体页面制作需要控件Panel,设置属性Dock控制所处的位置。用于在窗体上分组和组织其他控件。在Pannel里拖入Lable,Button,TextBox,Listview,FolderBrowerDialog,ContexMenuStrip,ImageList等控件。ListView:可以平铺的布局,用于以多种视图模式(如大图标、小图标、列表、详细......