c# IO操作

今天我们主要讨论的IO的一些操作,首先我们先引入三个变量:

 /// <summary>
 /// 配置绝对路径
 /// </summary>
 private static string LogPath = ConfigurationManager.AppSettings["LogPath"];
 private static string LogMovePath = ConfigurationManager.AppSettings["LogMovePath"];
 /// <summary>
 /// 获取当前程序路径,找到当前运行的exe程序所在的全路径即是D:\\...\\bin\\Debug\ /// </summary>
 private static string LogPath2 = AppDomain.CurrentDomain.BaseDirectory;

以下代码会用到上面的变量!

一:Directory操作类

 1  if (!Directory.Exists(LogPath)) //判断文件夹是否存在
 2  {
 3      //一次性创建全部的子路径,如果文件夹存在不报错 D:\\testIo\\20190131\\Log\\
 4      DirectoryInfo directoryInfo = Directory.CreateDirectory(LogPath);
 5
 6      //移动  原文件夹就不在了 LogPath原始文件,LogMovePath现在文件夹(移动的时候里面的所有文件都随着移动),
 7      //当LogMovePath存在时,则会报错
 8      //如:LogPath=D:\testIo\20190131\Log 9      //    LogMovePath=D:\testIo\20190132\LogMove\:(20190132这个文件夹必须存在,不然会报错)
10      // 则会把LogPath的log重命名为LogMove,转移到20190132这个文件夹下面,则20190131中的Log就会删除
11      Directory.Move(LogPath, LogMovePath);
12
13      //删除(最底层的文件夹)
14      //如果LogMovePath为D:\\testIo\\20190132\\LogMove\,则会删除LogMove,如果LogMove里面有内容或者文件夹,需要第二个参数赋值为:true,
15      //则会把LogMove以及对应的子文件或者文件夹全部删除不然会报错不能删除
16      LogMovePath = @"D:\testIo\20190132";
17      Directory.Delete(LogMovePath,true);
18  }

二:File类的操作类

 1 {
 2     //无论LogPath最后有没有/,最后都会根据需求自动以/隔开的
 3     string fileName = Path.Combine(LogPath, "log.txt");
 4     string fileNameCopy = Path.Combine(LogPath, "logCopy.txt");
 5     string fileNameMove = Path.Combine(LogPath, "logMove.txt");
 6     bool isExists = File.Exists(fileName); //判断文件是否存在
 7     if (!isExists)
 8     {
 9         Directory.CreateDirectory(LogPath);//创建了文件夹之后,才能创建里面的文件
10         using (FileStream fileStream = File.Create(fileName))//打开文件流 (创建文件并写入,如果存在则会先删除再重新创建写入)
11         {
12             string name = "小伙伴大家好!";
13             byte[] bytes = Encoding.Default.GetBytes(name);
14             fileStream.Write(bytes, 0, bytes.Length);
15             fileStream.Flush();
16         }
17         using (FileStream fileStream = File.Create(fileName))//打开文件流 (创建文件并写入,如果存在则会先删除再重新创建写入)
18         {
19             StreamWriter sw = new StreamWriter(fileStream);
20             sw.WriteLine("筒子们大家好!");
21             sw.Flush();
22         }
23
24         using (StreamWriter sw = File.AppendText(fileName))//流写入器(创建/打开文件并写入(之前文件如果有内容,则会保留,在后面追加))
25         {
26             string msg = "今天我们讨论一下IO操作器!";
27             sw.WriteLine(msg);
28             sw.Flush();
29         }
30         using (StreamWriter sw = File.AppendText(fileName))//流写入器(创建/打开文件并写入)
31         {
32             string name = "那让我们一起揭开IO的面纱!";
33             byte[] bytes = Encoding.Default.GetBytes(name);
34             sw.BaseStream.Write(bytes, 0, bytes.Length);
35             sw.Flush();
36         }
37
38         foreach (string result in File.ReadAllLines(fileName))
39         {
40             Console.WriteLine(result);
41         }
42
43         string sResult = File.ReadAllText(fileName); //读取文件的所有内容,得到字符串
44
45         Byte[] byteContent = File.ReadAllBytes(fileName); //读取文件的所有内容,得到字节
46         string sResultByte =Encoding.UTF8.GetString(byteContent); //把字节转换为字符串
47
48         using (FileStream stream = File.OpenRead(fileName))//分批读取
49         {
50             int length = 5;
51             int result = 0;
52
53             do
54             {
55                 byte[] bytes = new byte[length];
56                 result = stream.Read(bytes, 0, 5);
57                 for (int i = 0; i < result; i++)
58                 {
59                     Console.WriteLine(bytes[i].ToString());
60                 }
61             }
62             while (length == result);
63         }
64
65         File.Copy(fileName, fileNameCopy); //文件copy
66         File.Move(fileName, fileNameMove); //同上面文件夹移动
67         File.Delete(fileNameCopy); //删除fileNameCopy
68         File.Delete(fileNameMove);//删除fileNameMove,但是尽量不要delete
69     }
70 }

三:DriveInfo类

 1 {
 2     DriveInfo[] drives = DriveInfo.GetDrives();
 3     foreach (DriveInfo drive in drives)
 4     {
 5         //TotalSize 是字节
 6         if (drive.IsReady)
 7             Console.WriteLine($"类型:{drive.DriveType} 卷标:{drive.VolumeLabel} 名称:{drive.Name} 总空间:{drive.TotalSize} 剩余空间:{drive.TotalFreeSpace}");
 8         else
 9             Console.WriteLine($"类型:{drive.DriveType}  is not ready");
10     }
11 }

四:Path操作类

 1 {
 2     Console.WriteLine(Path.GetDirectoryName(LogPath));  //返回目录名,需要注意路径末尾是否有反斜杠对结果是有影响的
 3     Console.WriteLine(Path.GetDirectoryName(@"d:\\abc")); //将返回 d:\
 4     Console.WriteLine(Path.GetDirectoryName(@"d:\\abc\"));// 将返回 d:\abc
 5     Console.WriteLine(Path.GetRandomFileName());//将返回随机的文件名
 6     Console.WriteLine(Path.GetFileNameWithoutExtension("d:\\abc.txt"));// 将返回abc
 7     Console.WriteLine(Path.GetInvalidPathChars());// 将返回禁止在路径中使用的字符
 8     Console.WriteLine(Path.GetInvalidFileNameChars());//将返回禁止在文件名中使用的字符
 9     Console.WriteLine(Path.Combine(LogPath, "log.txt"));//合并两个路径Combine文件夹不用关心有没有"/",如果没有会自动添加一个"/"
10 }

五:最后来一个找到一个文件夹下面找出全部的子文件夹(使用递归)

 1 public class Recursion
 2     {
 3         /// <summary>
 4         /// 找出全部的子文件夹
 5         /// </summary>
 6         /// <param name="rootPath">根目录</param>
 7         /// <returns></returns>
 8         public static List<DirectoryInfo> GetAllDirectory(string rootPath)
 9         {
10             if (!Directory.Exists(rootPath))
11                 return new List<DirectoryInfo>();
12
13             List<DirectoryInfo> directoryList = new List<DirectoryInfo>();//容器
14             DirectoryInfo directory = new DirectoryInfo(rootPath);//root文件夹
15             directoryList.Add(directory);
16
17             return GetChild(directoryList, directory);
18         }
19
20         /// <summary>
21         /// 完成 文件夹--子目录--放入集合
22         /// </summary>
23         /// <param name="directoryList"></param>
24         /// <param name="directoryCurrent"></param>
25         /// <returns></returns>
26         private static List<DirectoryInfo> GetChild(List<DirectoryInfo> directoryList, DirectoryInfo directoryCurrent)
27         {
28             var childArray = directoryCurrent.GetDirectories();
29             if (childArray != null && childArray.Length > 0)
30             {
31                 directoryList.AddRange(childArray);
32                 foreach (var child in childArray)
33                 {
34                     GetChild(directoryList, child);
35                 }
36             }
37             return directoryList;
38         }
39     }

原文地址:https://www.cnblogs.com/loverwangshan/p/10342821.html

时间: 2024-10-12 05:37:09

c# IO操作的相关文章

JAVASE02-Unit08: 文本数据IO操作 、 异常处理

Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * java.io.Ob

006 异步IO操作

# 异步IO操作 CreateFile 使用 VS2015 新建win32 控制台应用程序 WindowsFileDemo win32控制台写窗口程序 需要加入头文件 #include <fileAPI.h> 就可以来使用CreateFile 分别有 CreateFileA  CreateFileW 窄字节 宽字节 1 HANDLE WINAPI CreateFile( 2 _In_ LPCTSTR lpFileName, 3 _In_ DWORD dwDesiredAccess, 4 _In

【UNIX环境高级编程】文件 IO 操作 - 基础函数 open close creat lseek write read 详解

博客地址 : http://blog.csdn.net/shulianghan/article/details/46980271 一. 文件打开关闭操作相关函数介绍 1. open 函数 (1) open 函数简介 open 函数解析 : -- 函数定义 : #include <fcntl.h> int open(const char *path, int oflag, ...); -- 函数作用 : 打开或者创建一个文件; -- 返回值 : 打开文件成功, 返回文件描述符; 如果失败, 返回

JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作

基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import java.io.IOException; /** * java标准IO(input/output)操作 * 输入流InputStrean:用于从数据源读取数据到程序中 * 输出流OutputStream:用于将数据发送至目标 * * 流划分为:节点流,处理流 * 节点流:又叫做低级流,特点:数据源明确,

python之协程与IO操作

协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕. 所以子程序调用是通过栈实现的,一个线程就是执行一个子程序. 子程序调用总是一个入口,一次返回,调用顺序是明确的.而协程的调用和子程序不同. 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,

黑马程序员--微信公众平台开发中的结合BAE进行IO操作的一些要点

微信公众平台开发中的结合BAE进行IO操作的一些要点进行整理,主要是为了实现图文消息的上传,和用模拟登陆的方式下载客户发送给公众账号的语音消息.图片消息等. package com.weinxin.utils; import com.baidu.inf.iis.bcs.BaiduBCS; import com.baidu.inf.iis.bcs.auth.BCSCredentials; public class BaiduBCSTools { public static String ACCES

java基础之IO操作

IO操作 ·文件类的使用(File) ·IO中流的基本使用(字符流.字节流.内存流.打印流) ·System类对IO的支持 ·对象序列化的问题 在整个的IO操作中,流的操作分为两种: ·字节流 字节输出流:OutputStream 字节输入流:InputStream ·字符流 字符输出流:Writer 字符输入流:Reader IO操作的基本步骤: 在Java的使用io的话,必须要按照以下的几个步骤进行(对文件操作来说): ·使用File找到一个文件 ·使用字节流或者字符流的子类为OutputS

imx6用文件io操作gpio

具体请参考: http://blog.csdn.net/u014213012/article/details/53140781 这里要注意的是: 要让linux支持文件io方式操作gpio,首先驱动必须得支持,也就是说设备树上必须先配置好gpio模式,然后参照以上链接去实现gpio操作 这里举例来说:hud项目中(imx6dl平台),有一个蓝牙电源的使能受GPIO1_IO30的控制,所以我们必须得在设备树上配置这个pad为GPIO模式 1.配置gpio模式 现在需要在设备树上配置GPIO1_IO

java的IO操作:字节流与字符流操作

流的概念 程序中的输入输出都是以流形式,流中保存的实际上都是字节文件. 字节流与字符流 字节流的操作: 1)输入:inputStream, 2)输出:outPutStream; 字符流的操作: 1)输入主要使用:write类. 2)输出主要使用:reader类. 内容操作就四个类. 操作流程: 使用File类操作一定有路径问题,注意分隔符: 实际上四个操作类都是抽象类(区别接口,抽象类的成员都是抽象,并且只能单继承,接口可以有全局变量,但是接口可以多继承) IO操作属于资源操作,对于资源操作,操

[Python基础]006.IO操作

IO操作 输入输出 print raw_input input 文件 打开文件 关闭文件 读文件 写文件 文件指针 实例 输入输出 输入输出方法都是Python的内建函数,并且不需要导入任何的包就可以使用. print 简单控制台输出方法 print ... print 'content' raw_input 简单的控制台输入方法 raw_input(显示的内容....) num = raw_input('Please input a number:') // 输入一个数字 print num