FileStream文件管理

文件管理

FileStream:是一个用于读写文件的一个类。它提供了基于流的方式操作文件,可以进行读取、写入、查找和关闭等操作。

第一个参数:path(路径)
相对路径:相对于当前项目的bin目录下的Debug和Realse来说的,只关乎要找的东西在哪,忽略外层地址。(@“”)
绝对路径:D:\WinForms\文件管理\bin (从外向内都直接指向了要查找的文件。)
第二个参数:FileMode
CreateNew = 1,
Create, 创建一个新的文件,如果文件存在,则覆盖该文件
Open, 打开一个已有的文件,如果文件不存在,则抛出异常
OpenOrCreate, 打开一个已有的文件,如果文件不存在,则按照指定路径创建一个新的文件并打开
Append 打开一个已经存在的文件,并将位置锁定到文件的末尾进行追加,不存在则创建

第三个参数:FileAccess(文件的读写权限)

首先我们先创建一个winform窗体,拖出下图示例的控件⬇

在这里插入图片描述

文本文件写入

private void btnWrite_Click(object sender, EventArgs e) {
  //创建文件流
  FileStream fileStream = new FileStream(@"myfile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
  //2、创建写入器
  StreamWriter writer = new StreamWriter(fileStream);
  //3、以流的形式写入数据
  writer.Write(this.textBox1.Text);
  //4、关闭写入器,注意这一步的目的是为了清理写入器中的缓存,证明已经写入成基础流了,所以要关闭
  writer.Close();
  //5、关闭文件流
  fileStream.Close();
}

读取文件内容

  private void btnRead_Click(object sender, EventArgs e) {
    FileStream fileStream = new FileStream(@"myfile.txt", FileMode.Open);
    StreamReader reader = new StreamReader(fileStream);
    //读取来自指定位置的流,直到结尾的所有字符
    this.textBox1.Text = reader.ReadToEnd();
    reader.Close();
    fileStream.Close();
  }

模拟写入系统日志

 private void btnLog_Click(object sender, EventArgs e) {
   try {
     FileStream fs = new FileStream(@"故意写一个不存在的文件.txt", FileMode.Open);
   } catch (Exception ex) {
     //日志错肯定不止一个,所以选用追加
     FileStream fileStream = new FileStream(@"文件操作项目的错误日志.log", FileMode.Append);
     StreamWriter streamWriter = new StreamWriter(fileStream);
     streamWriter.WriteLine(DateTime.Now.ToString() + ":[操作文件异常]" + ex.Message);
     streamWriter.Close();
     fileStream.Close();
   }
 }

删除文件

 private void btnDelete_Click(object sender, EventArgs e) {
   string deleteStr = this.txtOrigin.Text;
   File.Delete(deleteStr);
 }

复制文件

 private void btnCoppy_Click(object sender, EventArgs e) {
   //1、首先判断目标路径文件是否存在(如果文件存在,直接复制会报错) 
   if (File.Exists(this.txtTarget.Text)) {
     //存在,删除
     File.Delete(this.txtTarget.Text);
   }
   //复制文件
   File.Copy(this.txtOrigin.Text, this.txtTarget.Text);
 }

移动文件

private void btnMove_Click(object sender, EventArgs e) {
  if (File.Exists(this.txtTarget.Text)) {
    //存在,删除
    File.Delete(this.txtTarget.Text);
  }
  //如果当前文件存在才移动
  if (File.Exists(this.txtOrigin.Text)) {
    //存在,则删除
    File.Move(this.txtOrigin.Text, this.txtTarget.Text);
  } else {
    MessageBox.Show("要移动的文件不存在");
  }
}

显示指定目录下的所有文件

 private void showFolder_Click(object sender, EventArgs e) {
   string[] files = Directory.GetFiles(this.txtFolder.Text);
   textBox1.Text = "";
   for (int i = 0; i < files.Length; i++) {
     this.textBox1.Text += (i + 1) + "\t" + files[i] + "\r\n";
   }
 }

显示指定目录下所有子目录

private void button2_Click(object sender, EventArgs e) {
  string[] files = Directory.GetFileSystemEntries(this.txtFolder.Text);
  textBox1.Text = "";
  for (int i = 0; i < files.Length; i++) {
    this.textBox1.Text += (i + 1) + "\t" + files[i] + "\r\n";
  }
}

在指定目录下创建一个子目录

  private void button3_Click(object sender, EventArgs e) {
    Directory.CreateDirectory(this.txtFolder.Text);
  }

删除指定目录下所有子目录和文件

 private void button4_Click(object sender, EventArgs e) {
   //File与FileInfo都能实现,区别就是静态方法和实例方法
   //Directory与DirectoryInfo也都能实现,也是静态方法实例方法的区别
   //删除的是不能为空的目录
   //DirectoryInfo directoryInfo = new DirectoryInfo(this.txtFolder.Text);
   //参数表示是否删除子目录和文件,
   //true:强制删除,false:该文件夹必须为空才可以删除
   //directoryInfo.Delete(true);

   Directory.Delete(this.txtFolder.Text, true);
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/303283.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金蝶EAS pdfviewlocal 任意文件读取漏洞复现

0x01 产品简介 金蝶EAS 为集团型企业提供功能全面、性能稳定、扩展性强的数字化平台&#xff0c;帮助企业链接外部产业链上下游&#xff0c;实现信息共享、风险共担&#xff0c;优化生态圈资源配置&#xff0c;构筑产业生态的护城河&#xff0c;同时打通企业内部价值链的数据链…

Android Matrix (三)矩阵组合和应用变换

在 Android 开发中&#xff0c;Matrix 类不仅提供了 mapPoints 方法来变换点坐标&#xff0c;还提供了多种其他用法&#xff0c;使其成为处理图像和视图变换的强大工具。以下是 Matrix 类的一些关键用法&#xff1a; 1. 变换方法 setTranslate(float dx, float dy): 设置矩阵…

Qt/QML编程学习之心得:一个音频播放器的实现(29)

在window下&#xff0c;打开音乐播放器&#xff0c;然后打开一个.mp3文件&#xff0c;就可以实现播放了&#xff0c;那么在Qt/QML中如何实现呢&#xff1f;首先所有的设计都是基于音乐播放器的&#xff0c;嵌入式linux下同样也有音乐播放器&#xff0c;比如mplayer。其调用方法…

用通俗易懂的方式讲解:2024 检索增强生成技术(RAG)研究进展

本篇内容1w字左右&#xff0c;稍微有点长&#xff0c;相对不容易理解&#xff0c;喜欢可以收藏、关注、点赞。 一、前言 在过去的一两年里&#xff0c;人工智能领域目睹了检索增强生成技术&#xff08;RAG&#xff09;的迅猛发展&#xff0c;这种技术结合了强大的语言模型与信…

Tracert 与 Ping 程序设计与实现(2024)

1.题目描述 了解 Tracert 程序的实现原理&#xff0c;并调试通过。然后参考 Tracert 程序和计算机网络教材 4.4.2 节&#xff0c; 计算机网络 课程设计指导书 2 编写一个 Ping 程序&#xff0c;并能测试本局域网的所有机器是否在线&#xff0c;运行界面如下图所示的 QuickPing …

基于深度学习的PCB板缺陷检测系统(含UI界面、yolov5、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov5 yolov5主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM、CA等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主…

linux执行.sh文件出现问题--排查以及解决

阿丹问题描述&#xff1a; 今天在运行.sh文件的时候出现 现象1&#xff1a; 现象2&#xff1a; 现象3&#xff1a; 出现这三种问题 问题解释以及问题排查&#xff1a; 现象1&#xff1a; 排查&#xff1a; 1、判断文件是否存在 2、判断权限是否足够 解决&#xff1…

【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024

AI视野今日CS.Sound 声学论文速览 Fri, 5 Jan 2024 Totally 10 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers PosCUDA: Position based Convolution for Unlearnable Audio Datasets Authors Vignesh Gokul, Shlomo Dubnov深度学习模型需要大量干净的…

1.8 day6 IO进程线程

使用有名管道实现两个进程之间的通信 进程A #include <myhead.h> int main(int argc, const char *argv[]) {//创建两个文件描述符用于打开两个管道int fd1-1;int fd2-1;//创建一个子进程int pid-1;if((fd1open("./mkfifo1",O_RDWR))-1){perror("open er…

java中常见的一些小知识(1)

1.数组转List 1.1. Arrays.asList public class Tesr {public static void main(String[] args) {String[] ary new String[]{ "1", "a"};List<String> list Arrays.asList((ary));list.add("ddsdsa");System.out.println(list);}}但是…

SCI一区级 | Matlab实现RIME-CNN-LSTM-Mutilhead-Attention多变量多步时序预测

SCI一区级 | Matlab实现RIME-CNN-LSTM-Mutilhead-Attention多变量多步时序预测 目录 SCI一区级 | Matlab实现RIME-CNN-LSTM-Mutilhead-Attention多变量多步时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME-CNN-LSTM-Mutilhead-Attention霜冰算法…

简单几步,实现餐厅扫码点餐

越来越多的人选择外出就餐&#xff0c;而餐厅的点餐方式也随着科技的发展而不断进步。其中&#xff0c;扫码点餐是最为常见的一种方式&#xff0c;它不仅方便快捷&#xff0c;还能节省人力成本。本文将介绍一种简单易行的餐厅扫码点餐解决方案。 打开乔拓云平台&#xff0c;登录…

华为认证 | 这门HCIE认证正式发布!

华为认证openEuler专家HCIE-openEuler V1.0&#xff08;中文版&#xff09;自2023年12月29日起&#xff0c;正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司打造了覆盖ICT领域的认证体系&#xff0…

【JavaSE】Java中的反射动态代理

本篇文章整理的内容来源于: 反射原理 文章目录 一. 动态代理1. 优点2. 动态代理三要素3. 创建代理对象并使用 二. 反射1. 什么是反射2. 获取字节码文件对象的三种方式(1) Class.forName()获取 (源代码阶段)(2) 通过class属性获取(3) 通过对象获取字节码文件对象 3. 获取构造方…

基于深度学习的停车位关键点检测系统(代码+原理)

摘要&#xff1a; DMPR-PS是一种基于深度学习的停车位检测系统&#xff0c;旨在实时监测和识别停车场中的停车位。该系统利用图像处理和分析技术&#xff0c;通过摄像头获取停车场的实时图像&#xff0c;并自动检测停车位的位置和状态。本文详细介绍了DMPR-PS系统的算法原理、…

django websocket实现聊天室功能

注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…

数据库系统-甘晴void学习笔记

数据库系统笔记 计科210X 甘晴void 202108010XXX 教材&#xff1a;《数据库系统概论》第6版 &#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文章目录 数据库系统<br>笔记第一篇 基础篇1 绪论1.1数据库系统概述1.2数据模型1.3数据库系统的结构(三级模式结构…

JSP内置对象:forward动作标记和sendRedirect()方法实现页面跳转的区别

1.forward为服务器跳转&#xff0c;浏览器的地址栏不变&#xff1b; sendRedirect&#xff08;&#xff09;为客户端跳转&#xff0c;浏览器的地址栏改变变新页面的URL。 2.执行到forward标记出现处停止当前JSP页面的继续执行&#xff0c;而转向标记中的page属性指定的页面&am…

k8s的三种发布方式

三种常见的发布方式 应用程序升级面临最大挑战是新旧业务切换&#xff0c;将软件从测试的最后阶段带到生产环境&#xff0c;同时要保证系统不间断提供服务。而最为常见三种发布方式分别为&#xff1a;蓝绿发布&#xff0c;灰度发布和滚动发布。 三种发布方式的最终目的都是为了…

12 月 NFT 市场动态:强劲增长塑造年终趋势

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;NFT Research 12 月加密货币和 NFT 领域出现了显著的上涨趋势&#xff0c;比特币和以太坊价格的大幅上涨标志着市场的复苏。与此同时&#xff0c;NFT 领域的交易量飙升&#xff0c;独立用户&#xff08;钱包&am…