/// <summary>

/// 文件夹  文件管理

/// </summary>

public class MyIO

{
     /// <summary>
     /// 配置绝对路径
     /// </summary>
     private static string LogPath = ConfigurationManager.AppSettings["LogPath"];
     private static string LogMovePath = ConfigurationManager.AppSettings["LogMovePath"];
     /// <summary>
     /// 获取当前程序路径
     /// </summary>
     private static string LogPath2 = AppDomain.CurrentDomain.BaseDirectory;

/// <summary>
     /// 读取文件夹  文件信息
     /// </summary>
     public static void Show()
     {
         {//check
             if (!Directory.Exists(LogPath))//检测文件夹是否存在
             {

}
             DirectoryInfo directory = new DirectoryInfo(LogPath);//不存在不报错  注意exists属性
             Console.WriteLine(string.Format("{0} {1} {2}", directory.FullName, directory.CreationTime, directory.LastWriteTime));

if (!File.Exists(Path.Combine(LogPath, "info.txt")))
             {
             }

FileInfo fileInfo = new FileInfo(Path.Combine(LogPath, "info.txt"));

Console.WriteLine(string.Format("{0} {1} {2}", fileInfo.FullName, fileInfo.CreationTime, fileInfo.LastWriteTime));
         }
         {//Directory
             if (!Directory.Exists(LogPath))
             {
                 DirectoryInfo directoryInfo = Directory.CreateDirectory(LogPath);//一次性创建全部的子路径
                 Directory.Move(LogPath, LogMovePath);//移动  原文件夹就不在了
                 Directory.Delete(LogMovePath);//删除
             }
         }
         {//File
             string fileName = Path.Combine(LogPath, "log.txt");
             string fileNameCopy = Path.Combine(LogPath, "logCopy.txt");
             string fileNameMove = Path.Combine(LogPath, "logMove.txt");
             bool isExists = File.Exists(fileName);
             if (!isExists)
             {
                 Directory.CreateDirectory(LogPath);//创建了文件夹之后,才能创建里面的文件
                 using (FileStream fileStream = File.Create(fileName))//打开文件流 (创建文件并写入)
                 {
                     string name = "12345567778890";
                     byte[] bytes = Encoding.Default.GetBytes(name);
                     fileStream.Write(bytes, 0, bytes.Length);
                     fileStream.Flush();
                 }
                 using (FileStream fileStream = File.Create(fileName))//打开文件流 (创建文件并写入)
                 {
                     StreamWriter sw = new StreamWriter(fileStream);
                     sw.WriteLine("1234567890");
                     sw.Flush();
                 }

using (StreamWriter sw = File.AppendText(fileName))//流写入器(创建/打开文件并写入)
                 {
                     string msg = "今天是Course6IOSerialize,今天上课的人有55个人";
                     sw.WriteLine(msg);
                     sw.Flush();
                 }
                 using (StreamWriter sw = File.AppendText(fileName))//流写入器(创建/打开文件并写入)
                 {
                     string name = "0987654321";
                     byte[] bytes = Encoding.Default.GetBytes(name);
                     sw.BaseStream.Write(bytes, 0, bytes.Length);
                     sw.Flush();
                 }

foreach (string result in File.ReadAllLines(fileName))
                 {
                     Console.WriteLine(result);
                 }
                 string sResult = File.ReadAllText(fileName);
                 Byte[] byteContent = File.ReadAllBytes(fileName);
                 string sResultByte = System.Text.Encoding.UTF8.GetString(byteContent);

using (FileStream stream = File.OpenRead(fileName))//分批读取
                 {
                     int length = 5;
                     int result = 0;

do
                     {
                         byte[] bytes = new byte[length];
                         result = stream.Read(bytes, 0, 5);
                         for (int i = 0; i < result; i++)
                         {
                             Console.WriteLine(bytes[i].ToString());
                         }
                     }
                     while (length == result);
                 }

File.Copy(fileName, fileNameCopy);
                 File.Move(fileName, fileNameMove);
                 File.Delete(fileNameCopy);
                 File.Delete(fileNameMove);//尽量不要delete
             }
         }

{//DriveInfo
             DriveInfo[] drives = DriveInfo.GetDrives();

foreach (DriveInfo drive in drives)
             {
                 if (drive.IsReady)
                     Console.WriteLine("类型:{0} 卷标:{1} 名称:{2} 总空间:{3} 剩余空间:{4}", drive.DriveType, drive.VolumeLabel, drive.Name, drive.TotalSize, drive.TotalFreeSpace);
                 else
                     Console.WriteLine("类型:{0}  is not ready", drive.DriveType);
             }

}

{
             Console.WriteLine(Path.GetDirectoryName(LogPath));  //返回目录名,需要注意路径末尾是否有反斜杠对结果是有影响的
             Console.WriteLine(Path.GetDirectoryName(@"d:\\abc")); //将返回 d:\
             Console.WriteLine(Path.GetDirectoryName(@"d:\\abc\"));// 将返回 d:\abc
             Console.WriteLine(Path.GetRandomFileName());//将返回随机的文件名
             Console.WriteLine(Path.GetFileNameWithoutExtension("d:\\abc.txt"));// 将返回abc
             Console.WriteLine(Path.GetInvalidPathChars());// 将返回禁止在路径中使用的字符
             Console.WriteLine(Path.GetInvalidFileNameChars());//将返回禁止在文件名中使用的字符
             Console.WriteLine(Path.Combine(LogPath, "log.txt"));//合并两个路径
         }
     }

/// <summary>
     /// 关于异常处理:(链接:http://pan.baidu.com/s/1kVNorpd 密码:pyhv)
     /// 1  try catch旨在上端使用,保证对用户的展示
     /// 2  下端不要吞掉异常,隐藏错误是没有意义的,抓住再throw也没意义
     /// 3  除非这个异常对流程没有影响或者你要单独处理这个异常
     /// </summary>
     /// <param name="msg"></param>
     public static void Log(string msg)
     {
         StreamWriter sw = null;
         try
         {
             string fileName = "log.txt";
             string totalPath = Path.Combine(LogPath, fileName);

if (!Directory.Exists(LogPath))
             {
                 Directory.CreateDirectory(LogPath);
             }
             sw = File.AppendText(totalPath);
             sw.WriteLine(string.Format("{0}:{1}", DateTime.Now, msg));
             sw.WriteLine("***************************************************");
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);//log
             //throw ex;
             //throw new exception("这里异常");
         }
         finally
         {
             if (sw != null)
             {
                 sw.Flush();
                 sw.Close();
                 sw.Dispose();
             }
         }
     }

}

学习笔记: IO操作及序列化的更多相关文章

  1. Java学习笔记——IO操作之对象序列化及反序列化

    对象序列化的概念 对象序列化使得一个程序可以把一个完整的对象写到一个字节流里面:其逆过程则是从一个字节流里面读出一个事先存储在里面的完整的对象,称为对象的反序列化. 将一个对象保存到永久存储设备上称为 ...

  2. Java学习笔记——IO操作之以图片地址下载图片

    以图片地址下载图片 读取给定图片文件的内容,用FileInputStream public static byte[] mReaderPicture(String filePath) { byte[] ...

  3. Javascript学习笔记二——操作DOM

    Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...

  4. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  5. Javascript学习笔记三——操作DOM(二)

    Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...

  6. AI学习---数据IO操作&神经网络基础

    数据IO操作 TF支持3种文件读取:    1.直接把数据保存到变量中    2.占位符配合feed_dict使用    3. QueueRunner(TF中特有的) 文件读取流程 文件读取流程(多线 ...

  7. python学习笔记 IO 文件读写

    读写文件是最常见的IO操作.python内置了读写文件的函数. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统完成的,现代操作系统不允许普通的程序直接对磁盘进行操作,所以, 读写 ...

  8. Java 学习笔记 IO流与File操作

    可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件 读文件示例代码 File file = new File("D:\\test\\t.txt" ...

  9. java学习笔记--IO流

    第十二章大纲: I/O input/output 输入/输出 一.创建文件,借助File类来实现 file.createNewFile() : 创建文件 file.exists() : 判断文件是否存 ...

随机推荐

  1. python3-深浅copy

    转载:https://www.cnblogs.com/ctztake/p/8194275.html 术语 变量:是一个系统表的元素,拥有指向对象的连接空间. 对象:被分配的一块内存,存储其所代表的值. ...

  2. Vue父子组件和非父子组件传值问题

    父组件跟子组件之间的传值(具体参考lonzhubb商城) 1.父组件传值给子组件形式,ifshop是要传的对象,右边ifshop代表要传的这个对象的数据,如果只是传常量,那么属性可以不用加':'(表示 ...

  3. hibernate框架学习之多表查询helloworld

    package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...

  4. hibernate框架学习之核心配置文件

    hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration ...

  5. $Django 多对多-自定义第三张表 基于双下划线的跨表查询(补充)

    自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.C ...

  6. 我理解的vue生命周期

    说些题外话,引出vue的生命周期. 比如人出生到寿终正寝,这是人的一个生命周期.他会经历出生,婴儿时期,童年时期,少年时期,青年,中年,老年,到 end.然后,每个时期都会有一定的历史任务在等着去完成 ...

  7. linux无法启动httpd服务问题

    httpd 服务启动报错,可能出现的问题比较多,通过查看日志看是什么报错 (tail  200f /etc/httpd/logs/error_log) 1.查看防火墙是不是关闭状态 2.查看80端口是 ...

  8. ubuntu 精简配置

    是这样的情况,在windows 7的vm虚拟机上装了Ubuntu 12.04 Desktop,主要是想用它的gui, 所以把不要的给删了. sudo apt-get -y --auto-remove ...

  9. Maven安装与配置及使用

    下载及安装 官方下载地址:直达官网下载页面 进入下载页面后,根据你电脑所装jdk版本选择对应版本的maven进行下载. 我们可以看到该页上边红框内写明了,maven3.3版以上支持的是JDK1.7+的 ...

  10. postgresql 触发器 更新操作

    1 前言 功能需求:当一张表格某个字段变化,另一张表某个字段写入该值 2 代码 CREATE OR REPLACE FUNCTION "public"."synStatu ...