C#笔记(五):文件和流

我们可以知道,在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件、目录、数据流的操作。System.IO 命名空间

原理:.NET Framework封装了一系列底层的方法,有些直接与Windows API打交道。那么例如创建文件,要经过怎样的一个流程呢?实际上是调用System.IO 命名空间File类Create方法,Create方法再依次向上调用,调用底层的函数,再去调用Windows API创建文件的相关方法,一个新的文件就这样诞生了!

要使用IO操作,需要引用using System.IO。

 

文件总结

File类:提供用于创建、复制、删除、移动和打开文件的静态方法。File类

FileInfo类:提供创建、复制、删除、移动和打开文件的属性和实例方法。FileInfo类

Directory类:公开用于创建、移动和枚举目录和子目录的静态方法。Directory类

DirectoryInfo类:公开用于创建、移动和枚举目录和子目录的实例方法。 此类不能被继承。DirectoryInfo类

下面介绍比较常用的方法:(以File类为例子,其它类实现方法差不多)

1.判断文件是否存在

File.Exists();

2.创建文件

File.Create();

3.删除文件

File.Delete();

4.复制文件

File.Copy();

5.读写文件

File.ReadAllLines();

File.WriteAllLines();

上面方法通过字符串数组和IEnumerable方式读写数据,当然更好的方法是通过stream类以流的方式读写。

综合例子:

        static void Main(string[] args){string path = @"d:\mytest.txt";if (File.Exists(path)){File.Delete(path);}File.Create(path);Console.ReadKey();}

文件操作类:FileOperate

View Code
using System;
using System.Text;
using System.Web;
using System.IO;namespace Common
{/// <summary>/// 文件操作类/// </summary>public class FileOperate{#region 文件删除/// <summary>/// 文件删除/// </summary>/// <param name="FileRealPath">文件绝对路径</param>public static void DelFile(string FileRealPath){if (File.Exists(FileRealPath))File.Delete(FileRealPath);}/// <summary>/// 文件删除/// </summary>/// <param name="VirtualFilePath">文件虚拟路径</param>public static void FileDelete(string VirtualFilePath){//物理路径string RealFilePath = HttpContext.Current.Server.MapPath(VirtualFilePath);//如果文件存在则删除if (File.Exists(VirtualFilePath)){File.Delete(VirtualFilePath);}}/// <summary>/// 是否接连删除该路径下的small,middle中的图片/// </summary>/// <param name="VirtualFilePath">虚拟路径</param>/// <param name="IsDeleteForAll">是否需要删除该目录下的small,middle目录中的缩略图</param>public static void FileDelete(string VirtualFilePath, bool IsDeleteForAll){   //物理路径string RealFilePath = HttpContext.Current.Server.MapPath(VirtualFilePath);DelFile(RealFilePath);//是否需要删除该目录下的small,middle目录中的缩略图if (IsDeleteForAll){//文件名string FileName = Path.GetFileName(RealFilePath);//返回文件目录信息string FilePath = Path.GetDirectoryName(RealFilePath);//小图片地址string SmallPath = FilePath + "/small/" + FileName;//中图片地址string MiddlePath = FilePath + "/middle/" + FileName;DelFile(SmallPath);DelFile(MiddlePath);}}#endregion#region 写文件protected void Write_Txt(string FileName, string Content){Encoding code = Encoding.GetEncoding("gb2312");string htmlfilename = HttpContext.Current.Server.MapPath("Precious\\" + FileName + ".txt"); //保存文件的路径string str = Content;StreamWriter sw = null;{try{sw = new StreamWriter(htmlfilename, false, code);sw.Write(str);sw.Flush();}catch { }}sw.Close();sw.Dispose();}#endregion#region 读文件protected string Read_Txt(string filename){Encoding code = Encoding.GetEncoding("gb2312");string temp = HttpContext.Current.Server.MapPath("Precious\\" + filename + ".txt");string str = "";if (File.Exists(temp)){StreamReader sr = null;try{sr = new StreamReader(temp, code);str = sr.ReadToEnd(); // 读取文件
                }catch { }sr.Close();sr.Dispose();}else{str = "";}return str;}#endregion#region 取得文件后缀名/***************************************** 函数名称:GetPostfixStr* 功能说明:取得文件后缀名* 参    数:filename:文件名称* 调用示列:*           string filename = "aaa.aspx";        *           string s = DotNet.Utilities.FileOperate.GetPostfixStr(filename);         *****************************************//// <summary>/// 取后缀名/// </summary>/// <param name="filename">文件名</param>/// <returns>.gif|.html格式</returns>public static string GetPostfixStr(string filename){int start = filename.LastIndexOf(".");int length = filename.Length;string postfix = filename.Substring(start, length - start);return postfix;}#endregion#region 写文件/***************************************** 函数名称:WriteFile* 功能说明:当文件不存时,则创建文件,并追加文件* 参    数:Path:文件路径,Strings:文本内容* 调用示列:*           string Path = Server.MapPath("Default2.aspx");       *           string Strings = "这是我写的内容啊";*           DotNet.Utilities.FileOperate.WriteFile(Path,Strings);*****************************************//// <summary>/// 写文件/// </summary>/// <param name="Path">文件路径</param>/// <param name="Strings">文件内容</param>public static void WriteFile(string Path, string Strings){if (!System.IO.File.Exists(Path)){System.IO.FileStream f = System.IO.File.Create(Path);f.Close();f.Dispose();}System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true, System.Text.Encoding.UTF8);f2.WriteLine(Strings);f2.Close();f2.Dispose();}#endregion#region 读文件/***************************************** 函数名称:ReadFile* 功能说明:读取文本内容* 参    数:Path:文件路径* 调用示列:*           string Path = Server.MapPath("Default2.aspx");       *           string s = DotNet.Utilities.FileOperate.ReadFile(Path);*****************************************//// <summary>/// 读文件/// </summary>/// <param name="Path">文件路径</param>/// <returns></returns>public static string ReadFile(string Path){string s = "";if (!System.IO.File.Exists(Path))s = "不存在相应的目录";else{StreamReader f2 = new StreamReader(Path, System.Text.Encoding.GetEncoding("gb2312"));s = f2.ReadToEnd();f2.Close();f2.Dispose();}return s;}#endregion#region 追加文件/***************************************** 函数名称:FileAdd* 功能说明:追加文件内容* 参    数:Path:文件路径,strings:内容* 调用示列:*           string Path = Server.MapPath("Default2.aspx");     *           string Strings = "新追加内容";*           DotNet.Utilities.FileOperate.FileAdd(Path, Strings);*****************************************//// <summary>/// 追加文件/// </summary>/// <param name="Path">文件路径</param>/// <param name="strings">内容</param>public static void FileAdd(string Path, string strings){StreamWriter sw = File.AppendText(Path);sw.Write(strings);sw.Flush();sw.Close();sw.Dispose();}#endregion#region 拷贝文件/***************************************** 函数名称:FileCoppy* 功能说明:拷贝文件* 参    数:OrignFile:原始文件,NewFile:新文件路径* 调用示列:*           string OrignFile = Server.MapPath("Default2.aspx");     *           string NewFile = Server.MapPath("Default3.aspx");*           DotNet.Utilities.FileOperate.FileCoppy(OrignFile, NewFile);*****************************************//// <summary>/// 拷贝文件/// </summary>/// <param name="OrignFile">原始文件</param>/// <param name="NewFile">新文件路径</param>public static void FileCoppy(string OrignFile, string NewFile){File.Copy(OrignFile, NewFile, true);}#endregion#region 删除文件/***************************************** 函数名称:FileDel* 功能说明:删除文件* 参    数:Path:文件路径* 调用示列:*           string Path = Server.MapPath("Default3.aspx");    *           DotNet.Utilities.FileOperate.FileDel(Path);*****************************************//// <summary>/// 删除文件/// </summary>/// <param name="Path">路径</param>public static void FileDel(string Path){File.Delete(Path);}#endregion#region 移动文件/***************************************** 函数名称:FileMove* 功能说明:移动文件* 参    数:OrignFile:原始路径,NewFile:新文件路径* 调用示列:*            string OrignFile = Server.MapPath("../说明.txt");    *            string NewFile = Server.MapPath("http://www.cnblogs.com/说明.txt");*            DotNet.Utilities.FileOperate.FileMove(OrignFile, NewFile);*****************************************//// <summary>/// 移动文件/// </summary>/// <param name="OrignFile">原始路径</param>/// <param name="NewFile">新路径</param>public static void FileMove(string OrignFile, string NewFile){File.Move(OrignFile, NewFile);}#endregion#region 在当前目录下创建目录/***************************************** 函数名称:FolderCreate* 功能说明:在当前目录下创建目录* 参    数:OrignFolder:当前目录,NewFloder:新目录* 调用示列:*           string OrignFolder = Server.MapPath("test/");    *           string NewFloder = "new";*           DotNet.Utilities.FileOperate.FolderCreate(OrignFolder, NewFloder); *****************************************//// <summary>/// 在当前目录下创建目录/// </summary>/// <param name="OrignFolder">当前目录</param>/// <param name="NewFloder">新目录</param>public static void FolderCreate(string OrignFolder, string NewFloder){Directory.SetCurrentDirectory(OrignFolder);Directory.CreateDirectory(NewFloder);}/// <summary>/// 创建文件夹/// </summary>/// <param name="Path"></param>public static void FolderCreate(string Path){// 判断目标目录是否存在如果不存在则新建之if (!Directory.Exists(Path))Directory.CreateDirectory(Path);}#endregion#region 创建目录public static void FileCreate(string Path){FileInfo CreateFile = new FileInfo(Path); //创建文件 if (!CreateFile.Exists){FileStream FS = CreateFile.Create();FS.Close();}}#endregion#region 递归删除文件夹目录及文件/***************************************** 函数名称:DeleteFolder* 功能说明:递归删除文件夹目录及文件* 参    数:dir:文件夹路径* 调用示列:*           string dir = Server.MapPath("test/");  *           DotNet.Utilities.FileOperate.DeleteFolder(dir);       *****************************************//// <summary>/// 递归删除文件夹目录及文件/// </summary>/// <param name="dir"></param>  /// <returns></returns>public static void DeleteFolder(string dir){if (Directory.Exists(dir)) //如果存在这个文件夹删除之 
            {foreach (string d in Directory.GetFileSystemEntries(dir)){if (File.Exists(d))File.Delete(d); //直接删除其中的文件                        elseDeleteFolder(d); //递归删除子文件夹 
                }Directory.Delete(dir, true); //删除已空文件夹                 
            }}#endregion#region 将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。/***************************************** 函数名称:CopyDir* 功能说明:将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。* 参    数:srcPath:原始路径,aimPath:目标文件夹* 调用示列:*           string srcPath = Server.MapPath("test/");  *           string aimPath = Server.MapPath("test1/");*           DotNet.Utilities.FileOperate.CopyDir(srcPath,aimPath);   *****************************************//// <summary>/// 指定文件夹下面的所有内容copy到目标文件夹下面/// </summary>/// <param name="srcPath">原始路径</param>/// <param name="aimPath">目标文件夹</param>public static void CopyDir(string srcPath, string aimPath){try{// 检查目标目录是否以目录分割字符结束如果不是则添加之if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)aimPath += Path.DirectorySeparatorChar;// 判断目标目录是否存在如果不存在则新建之if (!Directory.Exists(aimPath))Directory.CreateDirectory(aimPath);// 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组//如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法//string[] fileList = Directory.GetFiles(srcPath);string[] fileList = Directory.GetFileSystemEntries(srcPath);//遍历所有的文件和目录foreach (string file in fileList){//先当作目录处理如果存在这个目录就递归Copy该目录下面的文件if (Directory.Exists(file))CopyDir(file, aimPath + Path.GetFileName(file));//否则直接Copy文件elseFile.Copy(file, aimPath + Path.GetFileName(file), true);}}catch (Exception ee){throw new Exception(ee.ToString());}}#endregion#region 获取指定文件夹下所有子目录及文件(树形)/***************************************** 函数名称:GetFoldAll(string Path)* 功能说明:获取指定文件夹下所有子目录及文件(树形)* 参    数:Path:详细路径* 调用示列:*           string strDirlist = Server.MapPath("templates");       *           this.Literal1.Text = DotNet.Utilities.FileOperate.GetFoldAll(strDirlist);  *****************************************//// <summary>/// 获取指定文件夹下所有子目录及文件/// </summary>/// <param name="Path">详细路径</param>public static string GetFoldAll(string Path){string str = "";DirectoryInfo thisOne = new DirectoryInfo(Path);str = ListTreeShow(thisOne, 0, str);return str;}/// <summary>/// 获取指定文件夹下所有子目录及文件函数/// </summary>/// <param name="theDir">指定目录</param>/// <param name="nLevel">默认起始值,调用时,一般为0</param>/// <param name="Rn">用于迭加的传入值,一般为空</param>/// <returns></returns>public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录 文件
        {DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录foreach (DirectoryInfo dirinfo in subDirectories){if (nLevel == 0){Rn += "";}else{string _s = "";for (int i = 1; i <= nLevel; i++){_s += "│&nbsp;";}Rn += _s + "";}Rn += "<b>" + dirinfo.Name.ToString() + "</b><br />";FileInfo[] fileInfo = dirinfo.GetFiles();   //目录下的文件foreach (FileInfo fInfo in fileInfo){if (nLevel == 0){Rn += "│&nbsp;├";}else{string _f = "";for (int i = 1; i <= nLevel; i++){_f += "│&nbsp;";}Rn += _f + "│&nbsp;├";}Rn += fInfo.Name.ToString() + " <br />";}Rn = ListTreeShow(dirinfo, nLevel + 1, Rn);}return Rn;}/***************************************** 函数名称:GetFoldAll(string Path)* 功能说明:获取指定文件夹下所有子目录及文件(下拉框形)* 参    数:Path:详细路径* 调用示列:*            string strDirlist = Server.MapPath("templates");      *            this.Literal2.Text = DotNet.Utilities.FileOperate.GetFoldAll(strDirlist,"tpl","");*****************************************//// <summary>/// 获取指定文件夹下所有子目录及文件(下拉框形)/// </summary>/// <param name="Path">详细路径</param>///<param name="DropName">下拉列表名称</param>///<param name="tplPath">默认选择模板名称</param>public static string GetFoldAll(string Path, string DropName, string tplPath){string strDrop = "<select name=\"" + DropName + "\" id=\"" + DropName + "\"><option value=\"\">--请选择详细模板--</option>";string str = "";DirectoryInfo thisOne = new DirectoryInfo(Path);str = ListTreeShow(thisOne, 0, str, tplPath);return strDrop + str + "</select>";}/// <summary>/// 获取指定文件夹下所有子目录及文件函数/// </summary>/// <param name="theDir">指定目录</param>/// <param name="nLevel">默认起始值,调用时,一般为0</param>/// <param name="Rn">用于迭加的传入值,一般为空</param>/// <param name="tplPath">默认选择模板名称</param>/// <returns></returns>public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn, string tplPath)//递归目录 文件
        {DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录foreach (DirectoryInfo dirinfo in subDirectories){Rn += "<option value=\"" + dirinfo.Name.ToString() + "\"";if (tplPath.ToLower() == dirinfo.Name.ToString().ToLower()){Rn += " selected ";}Rn += ">";if (nLevel == 0){Rn += "";}else{string _s = "";for (int i = 1; i <= nLevel; i++){_s += "│&nbsp;";}Rn += _s + "";}Rn += "" + dirinfo.Name.ToString() + "</option>";FileInfo[] fileInfo = dirinfo.GetFiles();   //目录下的文件foreach (FileInfo fInfo in fileInfo){Rn += "<option value=\"" + dirinfo.Name.ToString() + "/" + fInfo.Name.ToString() + "\"";if (tplPath.ToLower() == fInfo.Name.ToString().ToLower()){Rn += " selected ";}Rn += ">";if (nLevel == 0){Rn += "│&nbsp;├";}else{string _f = "";for (int i = 1; i <= nLevel; i++){_f += "│&nbsp;";}Rn += _f + "│&nbsp;├";}Rn += fInfo.Name.ToString() + "</option>";}Rn = ListTreeShow(dirinfo, nLevel + 1, Rn, tplPath);}return Rn;}#endregion#region 获取文件夹大小/***************************************** 函数名称:GetDirectoryLength(string dirPath)* 功能说明:获取文件夹大小* 参    数:dirPath:文件夹详细路径* 调用示列:*           string Path = Server.MapPath("templates"); *           Response.Write(DotNet.Utilities.FileOperate.GetDirectoryLength(Path));       *****************************************//// <summary>/// 获取文件夹大小/// </summary>/// <param name="dirPath">文件夹路径</param>/// <returns></returns>public static long GetDirectoryLength(string dirPath){if (!Directory.Exists(dirPath))return 0;long len = 0;DirectoryInfo di = new DirectoryInfo(dirPath);foreach (FileInfo fi in di.GetFiles()){len += fi.Length;}DirectoryInfo[] dis = di.GetDirectories();if (dis.Length > 0){for (int i = 0; i < dis.Length; i++){len += GetDirectoryLength(dis[i].FullName);}}return len;}#endregion#region 获取指定文件详细属性/***************************************** 函数名称:GetFileAttibe(string filePath)* 功能说明:获取指定文件详细属性* 参    数:filePath:文件详细路径* 调用示列:*           string file = Server.MapPath("robots.txt");  *            Response.Write(DotNet.Utilities.FileOperate.GetFileAttibe(file));         *****************************************//// <summary>/// 获取指定文件详细属性/// </summary>/// <param name="filePath">文件详细路径</param>/// <returns></returns>public static string GetFileAttibe(string filePath){string str = "";System.IO.FileInfo objFI = new System.IO.FileInfo(filePath);str += "详细路径:" + objFI.FullName + "<br>文件名称:" + objFI.Name + "<br>文件长度:" + objFI.Length.ToString() + "字节<br>创建时间" + objFI.CreationTime.ToString() + "<br>最后访问时间:" + objFI.LastAccessTime.ToString() + "<br>修改时间:" + objFI.LastWriteTime.ToString() + "<br>所在目录:" + objFI.DirectoryName + "<br>扩展名:" + objFI.Extension;return str;}#endregion}
}

 

流总结

我们在进行开发时,会经常用到流,那什么是流?流和文件有什么关系?

流是抽象的概念,可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。如文件的操作,输入/输出设备,内部进行通信的管道,Stream类及其派生类提供这些不同类型的输入和输出的一般视图,这样的程序员就不必熟悉操作系统和基础设备的具体细节,也可以对流进行操作。文件在操作时也表现为流,即流是从一些输入中读取到的一系列字节。

一个小例子:视频文件是文件之一,你可以在网上点播就播放而不必完全下载后才播放,因为这是流。

先来看下C#流的结构图:

分析:

1.Stream类,TextReader类,TextWriter类,BinaryReader类,BinaryWriter类都继承了IDisposable接口,所以使用后必须关闭流。

2.把流中数据加载到内存时要考虑内存溢出等问题。

3.Stream类,TextReader类,TextWriter类都为抽象类。

4.FileStream类:主要用于读取磁盘上的文件或者向磁盘文件写入信息。有时,我们需要将程序中的一些数据存储到磁盘上或是读取配置文件中某些内容,在这里我们就会用该类。

5.MemoryStream类: 主要用于操作内存中的数据。比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以声明MemoryStream类来存储并且处理它们。

6.BufferedStream类:主要也是用来处理流数据的,但是该类主要的功能是用来封装其他流类。为什么要封装其他流类,这么做的意义是什么?按照微软的话说主要是减少某些流直接操作存储设备的时间。对于一些流来说直接向磁盘中存储数据这种做法的效率并不高,用BufferedStream包装过的流,先在内存中进行统一的处理再向磁盘中写入数据,也会提高写入的效率。

7. NetworkStream类:主要是专门用来处理服务器与客户端通信的流。它在网络编程中经常使用,主要是用来处理类似Socket、TcpClient和TcpListener这些类中得到的流。

8.StreamReader/StreamWriter类:主要用来处理流数据。它们分别提供了高效的流读取/写入功能。

9.TextReader/TextWriter类:主要用来处理流数据。它们分别提供了高效的文本流读取/写入功能。

具体使用可参考:C#流总结  C#温故而知新

 

字符编码问题

在System.Text命名空间下可以找到Encoding类,它表示字符编码的类。Encoding类

在使用IO操作时,需要涉及到文件字符编码问题,因此这一块也需要去了解。

 

作者: ForEvErNoME
出处: http://www.cnblogs.com/ForEvErNoME/
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐关注

转载于:https://www.cnblogs.com/ForEvErNoME/archive/2012/09/02/2633876.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(545):node的系统模块require

let path require(path);console.log(path.dirname(/node/a/b/c/1.jpg)); console.log(path.basename(/node/a/b/c/1.jpg)); console.log(path.extname(/node/a/b/c/1.jpg)); 运行结果

PHPUnit安装、用法、测试(三)

首先我装的是phpunit 3.6.12 上代码吧&#xff1a; <?php class DataTest extends PHPUnit_Framework_TestCase{public static function provider(){return array(array(0,0,0),array(0,1,1),array(1,0,1),array(1,1,2)); }/***dataProvider provider**/public function te…

oracle使用 union all 用自增序列_值得收藏的Oracle数据库性能优化

值得收藏的Oracle数据库性能优化年尾了&#xff0c;新的一波面试军又要开始了&#xff0c;被问到最多的可能就是性能优化&#xff0c;尤其是数据库性能优化&#xff0c;这个面试题不管是初中高级工程师都会被问到。因此我觉得下面31点ORACLE优化还是值得调几个去面试。也方便以…

java mysql blob 存储图片_Java操作mysql存储图片

http://bbs.chinaunix.net/archiver/tid-2289421.html1把图片当成一个二进制流就可以了。mysql中有可以存储很大的2进制流文件。用的类型是&#xff1a;我们要做的是将一张图片存入Mysql中,在Mysql中用Blob来存储图片和音频等大的数据项.Blob 按其容量可分为四种,分别为:tinybl…

前端学习(547):node的系统模块fs

let fs require(fs);fs.readFile(./a.txt,(err,data)>{if(err){console.log(err);}else{console.log(data.toString());} })fs.writeFile(b.txt,月薪2元,{flag:"a"},(err)>{if(err){throw err} })运行结果

微软发布Visual Studio 2012 示例代码浏览器

示例代码对于开发人员的重要性是不言而喻的。很多程序员往往通过示例代码着手学习一门技术。当开发人员遇到编码困难时也往往希望得到示例代码来解决疑难杂症。示例代码可谓是开发人员的良师益友&#xff0c;为程序员的学习和工作保驾护航。 微软一站式示例代码库&#xff0c;与…

maya python 创建求_如何使用python在Maya中创建列表

预期输出我想在Maya 2014中创建一个用户界面&#xff0c;其中包含图像中给定的图层和相机。我不知道该使用什么小部件。我尝试创建&#xff0c;代码如下所示。在import maya.cmds as cmdswindow cmds.window( title"Render", iconNameBTD,widthHeight(400,300),titl…

前端学习(548):node的自定义模块

demo4.js exports.a1; exports.b2; let c3; demo5.js const mod1require(./demo4);console.log(mod1.a); console.log(mod1.b); console.log(mod1.c); 运行结果

通用滤波器设计----东南大学的

转载于:https://www.cnblogs.com/tureno/articles/2675060.html

liunx下搭建mysql主从_linux下搭建mysql主从

在master上创建repl账户&#xff0c;用于复制。grant replication slave on *.* to [email protected]%‘ identified by ‘P$$W0rd‘;flush privileges;与windows下搭建mysql主从的区别&#xff1a;二进制日志的路径格式不一样master:my.cnf部分配置(master):thread_handling …

前端学习(549):node的 http模块

let http require(http) let fs require(fs) http.createServer((req,res)>{console.log("我来了");console.log(req.url);res.end(index);fs.readFile(${req.url},(err,data)>{if(err){console.log(err)res.writeHead(404)res.end(404 not found)}else{res.…

烙饼啊烙饼{转自ITEO

一摞烙饼 博客分类&#xff1a; 编程1.有一些服务员会把上面的一摞饼子放在自己头顶上&#xff08;放心&#xff0c;他们都戴着洁白的帽子&#xff09;&#xff0c;然后再处理其他饼子&#xff0c;在这个条件下&#xff0c;我们的算法能有什么改进&#xff1f; Java代码 int[] …

前端学习(553):node实现登录和注册第一部分代码

const http require(http); const url require(url) const querystring require(querystring) let user{admin:123456 } http.createServer((req,res)>{let path,get,post//如果是get请求if(req.methodGET){let{pathname,query} url.parse(req.url,true)pathpathname,ge…

前端学习(554):node实现登录和注册第二部分代码

jquery.min.js npm安装jQuery并引入 app.js const http require(http); const url require(url) const querystring require(querystring) const fs require(fs) let user{admin:12345 } http.createServer((req,res)>{let path,get,post//如果是get请求if(req.method…

『AA』AutoAnchor自动猫

2012-09-17 19:40:31&#xff1a;嘿嘿&#xff0c;给自己出了道编程题&#xff0c;难度不大&#xff08;YY都可以&#xff09;&#xff0c; 大家有兴趣可以自己去实现下。 文章目录 引子思路用法bug源代码 & 可执行文件引子 一篇博文如果太长的话&#xff0c;为博文标题添加…

前端学习(557):css与百分比单位

普通元素的百分比是按照元素的宽度决定的 绝对定位的百分比是按照第一个定位元素的容器的宽度计算的