C#入门篇章— IO操作
bigegpt 2025-01-05 15:50 29 浏览
C# IO操作
一、String常用API
string 关键字是 System.String 类的别名。
1. 创建 String 对象
创建String对象的方法:
- 通过给 String 变量指定一个字符串
- 通过使用 String 类构造函数
- 通过使用字符串串联运算符( + )
- 通过检索属性或调用一个返回字符串的方法
- 通过格式化方法来转换一个值或对象为它的字符串表示形式
// 示例
using System;
namespace StringApplication
{
class Program
{
static void Main(string[] args)
{
//通过使用 string 构造函数
char[] letters = { 'H', 'e', 'l', 'l','o' };
string greetings = new string(letters);
Console.WriteLine("Greetings: {0}", greetings);
//方法返回字符串
string[] sarray = { "Hello", "From", "Tutorials", "Point" };
string message = String.Join(" ", sarray);
Console.WriteLine("Message: {0}", message);
//用于转化值的格式化方法
DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
string chat = String.Format("Message sent at {0:t} on {0:D}",
waiting);
Console.WriteLine("Message: {0}", chat);
Console.ReadKey() ;
}
}
}
// 输出结果
Greetings: Hello
Message: Hello From Tutorials Point
Message: Message sent at 17:58 on Wednesday, 10 October 2012
Substring方法
Substring(索引, 个数);
// 例:
string s = "abcde";
s.Substring(0, 3); // abc
s.Substring(3); // de
2. String 类的属性
String类具有以下两个属性:
序号 | 属性名称 & 描述 |
1 | Chars:在当前 String 对象中获取 Char 对象的指定位置。 |
2 | Length:在当前的 String 对象中获取字符数。 |
3. String 类的方法
序号 | 方法名称 & 描述 |
1 | public static int Compare( string strA, string strB )比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。 |
2 | public static int Compare( string strA, string strB, bool ignoreCase )比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。但是,如果布尔参数为真时,该方法不区分大小写。 |
3 | public static string Concat( string str0, string str1 )连接两个 string 对象。 |
4 | public static string Concat( string str0, string str1, string str2 )连接三个 string 对象。 |
5 | public bool Contains( string value )返回一个表示指定 string 对象是否出现在字符串中的值。 |
6 | public static string Copy( string str )创建一个与指定字符串具有相同值的新的 String 对象。 |
7 | public void CopyTo( int sourceIndex, char[] destination, int destinationIndex, int count )从 string 对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。 |
8 | public bool EndsWith( string value )判断 string 对象的结尾是否匹配指定的字符串。 |
9 | public bool Equals( string value )判断当前的 string 对象是否与指定的 string 对象具有相同的值。 |
10 | public static bool Equals( string a, string b )判断两个指定的 string 对象是否具有相同的值。 |
11 | public static string Format( string format, Object arg0 )把指定字符串中一个或多个格式项替换为指定对象的字符串表示形式。 |
12 | public int IndexOf( char value )返回指定 Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。 |
13 | public int IndexOf( string value )返回指定字符串在该实例中第一次出现的索引,索引从 0 开始。 |
14 | public int IndexOf( char value, int startIndex )返回指定 Unicode 字符从该字符串中指定字符位置开始搜索第一次出现的索引,索引从 0 开始 |
15 | public int IndexOf( string value, int startIndex )返回指定字符串从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始 |
16 | public int IndexOfAny( char[] anyOf )返回某一个指定的 Unicode 字符数组中任意字符在该实例中第一次出现的索引,索引从 0 开始。 |
17 | public int IndexOfAny( char[] anyOf, int startIndex )返回某一个指定的 Unicode 字符数组中任意字符从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。 |
18 | public string Insert( int startIndex, string value )返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。 |
19 | public static bool IsNullOrEmpty( string value )指示指定的字符串是否为 null 或者是否为一个空的字符串。 |
20 | public static string Join( string separator, string[] value )连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。 |
21 | public static string Join( string separator, string[] value, int startIndex, int count )连接一个字符串数组中的指定位置开始的指定元素,使用指定的分隔符分隔每个元素。 |
22 | public int LastIndexOf( char value )返回指定 Unicode 字符在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。 |
23 | public int LastIndexOf( string value )返回指定字符串在当前 string 对象中最后一次出现的索引位置,索引从 0 开始 |
24 | public string Remove( int startIndex )移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。 |
25 | public string Remove( int startIndex, int count )从当前字符串的指定位置开始移除指定数量的字符,并返回字符串。 |
26 | public string Replace( char oldChar, char newChar )把当前 string 对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。 |
27 | public string Replace( string oldValue, string newValue )把当前 string 对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。 |
28 | public string[] Split( params char[] separator )返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。 |
29 | public string[] Split( char[] separator, int count )返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。int 参数指定要返回的子字符串的最大数目。 |
30 | public bool StartsWith( string value )判断字符串实例的开头是否匹配指定的字符串。 |
31 | public char[] ToCharArray()返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。 |
32 | public char[] ToCharArray( int startIndex, int length )返回一个带有当前 string 对象中所有字符的 Unicode 字符数组,从指定的索引开始,直到指定的长度为止。 |
33 | public string ToLower()把字符串转换为小写并返回。 |
34 | public string ToUpper()把字符串转换为大写并返回。 |
35 | public string Trim()移除当前 String 对象中的所有前导空白字符和后置空白字符。 |
void Test1()
{
string str1 = "BAD";
// 1.Length
Debug.Log("str1.Length: " + str1.Length);
string str2 = "bad";
// 2.Compare
// Compare 返回值 =0,代表两个字符串相等;非0,表示不相等
// 注意:在C#中,字符串是对大小写敏感的
Debug.Log("str1 & str2 Compare: " + string.Compare(str1, str2));
Debug.Log("str1 & str2 Compare(忽略大小写): " + string.Compare(str1, str2, true));
// 3.Equals
Debug.Log(string.Equals(str1, str2));
Debug.Log(str1.Equals(str2));
// 4.Concat 连接string对象
Debug.Log(string.Concat(str1, str2));
// 5.Format 格式化输出
Debug.Log(string.Format("name:{0} age:{1}", "张三", 14));
// 6.Contains 判断字符串中是否包含目标字符串(只能判断字符串)
Debug.Log(str1.Contains("A"));
Debug.Log(str1.Contains("d"));
// 7.IndexOf 返回指定字符/字符串的索引
Debug.Log(str1.IndexOf("D"));
// 8.LastIndexOf 返回指定字符/字符串最后出现位置的索引
string str3 = "INTERESTING";
Debug.Log(str3.LastIndexOf("I"));
// 9.StartWith/EndWith 判断开头/结尾是否是某个字母
Debug.Log(str1.StartsWith("B"));
Debug.Log(str1.EndsWith("B"));
// 10.Insert 返回插入后的字符串
Debug.Log(str1.Insert(0, "NOT"));
// 11.IsNullOrEmpty 判断字符串是否为空
Debug.Log(string.IsNullOrEmpty(str1));
// 12.Remove 移除 开始位置 + 结束位置
Debug.Log(str2.Remove(0, 2) + str2);
// 13.Replace 替换 被替换字符 + 替换字符
Debug.Log(str1.Replace("B", "b"));
// 14.Split 分割字符串
string[] arr = str3.Split(new char[] { 'R' });
for (int i = 0; i < arr.Length; i++)
{
Debug.Log(arr[i]);
}
// 15.ToUpper/ToLower 转为大/小写
Debug.Log(str2.ToUpper());
Debug.Log(str3.ToLower());
// 16.Trim 去掉空格
string str4 = " Job";
Debug.Log("str4:" + str4.Trim());
}
二、StringBuilder常用API
1. StringBuilder 类的作用:
string对象是不可变的,每次修改都会创建一个新的对象,StringBuilder可以保证修改字符串而不创建新的对象。
2. StringBuilder 类的使用
通过一个重载的构造函数方法初始化变量,就可以创建 StringBuilder 类的新实例。
StringBuilder MyStringBuilder = new StringBuilder("Hello World");
3. 设置容量和长度
StringBuilder对象是动态对象,允许扩充它所封装的字符串中字符的数量。
对象的容量:StringBuilder对象可容纳的最大字符数。
长度:StringBuilder对象容纳的字符串长度。
两者不能混为一谈,StringBuilder对象在达到容量之前,不会为其自己重新分配空间。当达到容量时,将自动分配新的空间,且容量翻倍。
4. StringBuilder 常用方法
(1)Append("string")方法:
该方法用来将文本或对象的字符串表示形式添加到当前StringBuilder对象表示的字符串结尾处。
(2)AppendFormat("{0:C}", MyInt)方法:
AppendFormat方法可自定义变量的格式,并将这些值追加到StringBuilder后面。
(3)Insert(index, "string")方法
该方法会将字符串或对象添加到当前 StringBuilder中的指定位置。
(4)Remove(index, num)方法
可使用Remove方法从当前StringBuilder中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。
(5)Replace('a', 'z')方法
Replace方法可将另一个指定的字符来替换StringBuilder对象内的字符。
5. StringBuilder 示例
void Test1()
{
StringBuilder strB = new StringBuilder("Hello World !");
strB.Capacity = 25;
// 1.打印strB的长度和容量
Debug.Log("strB.Length: " + strB.Length
+ " strB.Capacit: " + strB.Capacity);
// 2.常用API
// 2.1 Append 末尾追加
strB = strB.Append(" What a Beautiful Day.");
Debug.Log("strB.Append: " + strB.ToString());
// 2.2 AppendFormat 格式化追加
strB = strB.AppendFormat("{0}", 9888);
Debug.Log("strB.AppendFormat: " + strB.ToString());
// 2.3 Insert 插入
strB = strB.Insert(6, "Beautiful");
Debug.Log("strB.Insert: " + strB.ToString());
// 2.4 Remove 移除
strB = strB.Remove(6, 9);
Debug.Log("strB.Remove: " + strB.ToString());
// 2.5 Replace 替换
strB = strB.Replace('H', 'h');
Debug.Log("strB.Replace: " + strB.ToString());
// 链式表达的概念
StringBuilder strB2 = new StringBuilder("Hello");
strB2 = strB2.Append("+").Append("-").Append("*");
Debug.Log("链式表达的写法:" + strB2.ToString());
}
三、String和StringBuilder的区别
string本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低 .NET 编译器的工作效率。
而StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生产新的对象,其所占空间会随着内容的增加而扩充。这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。
四、FileStream文件读写
在 C# 语言中文件读写流使用 FileStream 类主要用于文件的读写,不仅能读写普通的文本文件,还可以读取图像文件,声音文件等不同格式的文件。
1. 各枚举类型的值
在创建 FileStream 类的实例时还会涉及多个枚举类型的值,包括 FileAccess、FileMode、FileShare、FileOption等。
- FileAccess
- 枚举类型主要用于设置文件的访问方式,具体枚举值如下:
- Read
- :以只读方式打开文件;
- Write
- :以写方式打开文件;
- ReadWrite
- :以读写方式打开文件。
- FileMode
- 枚举类型主要用于设置文件打开或创建的方式,具体枚举类型如下:
- CreateNew
- :创建新文件,如果文件已经存在,则会抛出异常;
- Create
- :创建文件,如果文件已经存在,则会输出异常;
- Open
- :打开已经存在的文件,如果文件不存在,则会抛出异常;
- OpenOrCreate
- :打开已经存在的文件,如果文件不存在则创建文件;
- Truncate
- :打开已经存在的文件,并清除文件中的内容,保留文件的创建日期,如果文件不存在,则会抛出异常;
- Append
- :打开文件,用于向文件中追加内容,如果文件不存在,则创建一个新文件。
- FileShare
- 枚举类型主要用于设置多个对象同时访问同一个文件时的访问控制,具体枚举值如下:
- None
- :谢绝共享当前文件;
- Read
- :允许随后打开文件读取信息;
- ReadWrite
- :允许随后打开文件读写信息;
- Write
- :允许随后打开文件写入信息;
- Delete
- :允许随后删除文件;
- Inheritable
- :使文件句柄可由子进程继承。
- FileOptions
- 枚举类型用于设置文件的高级选项,包括文件是否加密,访问后是否删除等,具体枚举值如下:
- WriteThrough
- :指示系统应通过任何中间缓存、直接写入磁盘;
- None
- :指示在生成 System.IO.FileStream 对象时不应使用其他选项;
- Encrypted
- :指示文件是加密的,只能通过用于加密的同一用户账户来解密;
- DeleteOnClose
- :指示当不再使用某个文件时自动删除该文件;
- SequentialScan
- :指示按从头到尾的顺序访问文件;
- RandomAccess
- :指示随机访问文件;
- Asynchronous
- :指示文件可用于异步读取和写入。
2. 常用 FileStream 类的构造方法
构造方法 | 说明 |
FileStream(string path, FileMode mode) | 使用指定路径的文件、文件模式创建 FileStream 类的实例 |
FileStream(string path, FileMode mode, FileAccess access) | 使用指定路径的文件、文件打开模式、文件访问模式创建 FileStream类的实例 |
FileStream(string path, FileMode mode, FileAccess access, FileShare share) | 使用指定的路径、创建模式、读写权限和共享权限创建 FileStream类的一个新实例 |
FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions) | 使用指定的路径、创建模式、读写权限和共享权限、其他文件选项创建 FileStream类的实例 |
通过实例来演示 FileStream类的应用:
using System.IO;
using System.Text;
public class filestream : MonoBehaviour
{
void Start()
{
CreateFile();
ReadFile();
}
void CreateFile()
{
// 定义文件路径
string path = @"C:\Users\Dukenone\test01\Assets\Resources\student.txt";
// 创建 FileStream 类的实例
FileStream fileStream = new FileStream(path,
FileMode.OpenOrCreate, FileAccess.ReadWrite,
FileShare.ReadWrite);
// 定义学号
string msg = "1910300421";
// 将字符串转换为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(msg);
// 向文件中写入字节数组
fileStream.Write(bytes, 0, bytes.Length);
// 刷新缓冲区
fileStream.Flush();
// 关闭流
fileStream.Close();
}
void ReadFile()
{
// 定义文件路径
string path = @"C:\Users\Dukenone\test01\Assets\Resources\student.txt";
// 判断是否含有指定文件
if(File.Exists(path))
{
FileStream fileStream = new FileStream(path,
FileMode.Open, FileAccess.Read);
// 定义存放文件信息的字节数组
byte[] bytes = new byte[fileStream.Length];
// 读取文件信息
fileStream.Read(bytes, 0, bytes.Length);
// 将得到的字节型数组重写编码为字符型数组
string c = Encoding.UTF8.GetString(bytes);
// 输出学生学号
Debug.Log("学生学号为: " + c);
// 关闭流
fileStream.Close();
}
else
{
Debug.LogError("您查看的文件不存在");
}
}
}
五、StreamReader/StreamWriter读写文件
http://System.IO 命名空间下的 StreamReader 和 StreamWriter 类可以用于文本文件的数据读写。这些类继承自抽象基类 Stream,Stream 类提供了对文件流读写的功能。
1. StreamReader
StreamReader 类继承自抽象基类TextReader,用来从文件中读取一系列字符,下面是StreamReader类中一些常用的方法:
方法 | 描述 |
public override void Close() | 关闭StreamReader对象和基础流,并释放任何与之相关的系统资源 |
public override int Peek() | 返回下一个可用的字符,但不使用它 |
public override int Read() | 从输入流中读取下一个字符,并把字符位置往前移一个字符 |
2. StreamWriter
StreamWriter 类同样继承自抽象类 TextWriter,用来向文件中写入一系列字符,下面是 StreamWriter 类中一些常用的方法:
方法 | 描述 |
public override void Close() | 关闭当前的 StreamWriter 对象和基础流 |
public override void Flush() | 清理当前所有的缓冲区,使所有缓冲数据写入基础流 |
public virtual void Write(bool value) | 将布尔值的文本表示形式写入文本流 |
public override void Write(char value) | 将一个字符写入流 |
public virtual void Wrtie(decimal value) | 将一个小数值的文本表示形式写入文本流 |
public virtual void Write(double value) | 将一个8字节浮点值的文本表示形式写入文本流 |
public virtual void Write(int value) | 将一个4字节浮点值的文本表示形式写入文本流 |
public override void Write(string value) | 将一个字符串写入文本流 |
public virtual void WriteLine() | 将行结束符写入文本流 |
利用 StreamWriter 和 StreamReader 读写文件的实例:
void CreateFile()
{
// 定义文件路径
string path = @"C:\Users\Dukenone\test01\Assets\Resources\student2.txt";
// 创建 StreamWriter 类的实例
StreamWriter streamWriter = new StreamWriter(path);
// 向文件中写入姓名
streamWriter.WriteLine("李四");
// 向文件中写入手机号
streamWriter.WriteLine("13697265266");
// 刷新缓存
streamWriter.Flush();
// 关闭流
streamWriter.Close();
}
void ReadFile()
{
// 定义文件路径
string path = @"C:\Users\Dukenone\test01\Assets\Resources\student2.txt";
// 创建 StreamReader 类的实例
StreamReader streamReader = new StreamReader(path);
// 判断文件中是否有字符
while(streamReader.Peek() != -1)
{
// 读取文件中的一行字符
string str = streamReader.ReadLine();
Debug.Log(str);
}
// 关闭流
streamReader.Close();
}
六、Directory/DirectoryInfo操作文件夹
1. Directory类:文件夹操作
Directory 类是一个静态类,不能创建该类的实例,而是直接通过 “类名, 类成员” 的形式调用其属性和方法。
Directory 类调用实例:
void TestDirectory()
{
string strDir = @"C:\Users\Dukenone\test01\Assets\Resources\DirTest";
// 创建文件夹
Directory.CreateDirectory(strDir);
// 判断某路径的文件夹是否存在
Directory.Exists(strDir);
// 删除指定的文件夹
Directory.Delete(strDir);
// 如果该路径存在此文件夹就删除它,不存在就创建
if(Directory.Exists(strDir))
{
Directory.Delete(strDir);
}
else
{
Directory.CreateDirectory(strDir);
}
// 将指定文件夹移动到指定位置
Directory.Move(strDir, @"C:\Users\Dukenone\test01\Assets\DirTest");
// 若待删除的文件夹下存在子文件夹,则需要传递 true
// 这样将递归删除该文件夹下的子文件夹,同时删除自己
Directory.Delete(@"C:\Users\Dukenone\test01\Assets\DirTest", true);
}
2. DirectoryInfo类:文件夹操作
DirectoryInfo类能创建该类的实例,通过类的实例访问类成员。
DirectoryInfo类提供了一个构造方法,语法如下:
DirectoryInfo(string path)
DirectoryInfo 调用实例:
void TestDirectoryInfo()
{
string strDir = @"C:\Users\Dukenone\test01\Assets\Resources\DirTest";
// 创建文件夹
DirectoryInfo directoryInfo = new DirectoryInfo(strDir);
directoryInfo.Create();
// 创建子文件夹
directoryInfo.CreateSubdirectory("code_1");
directoryInfo.CreateSubdirectory("code_2");
// 删除文件夹 true 同时递归删除下面的子文件夹
//directoryInfo.Delete(true);
// 返回当前目录的子目录
IEnumerable<DirectoryInfo> dir = directoryInfo.EnumerateDirectories();
foreach(var v in dir)
{
Debug.Log(v.Name);
}
// 移动文件夹
directoryInfo.MoveTo(@"C:\Users\Dukenone\test01\Assets\DirTest");
}
- 上一篇:正确复制、重写别人的代码,不算抄袭
- 下一篇:34.C# 类的静态成员
相关推荐
- 5分钟搭建公网https网页文件服务器,免费权威TLS证书
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习前言本文主要讲解如何快速搭建一个https网页文件服务器,并免费申请权威机构颁发的tls证...
- nginx负载均衡配置(nginx负载均衡配置两个程序副本)
-
Nginx是什么没有听过Nginx?那么一定听过它的“同行”Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResources...
- 19《Nginx 入门教程》Nginx综合实践
-
今天我们将基于Nginx完成两个比较有用的场景,但是用到的Nginx的配置非常简单。内部Yum源搭建内部Pip源搭建1.实验环境ceph1centos7.6内网ip:172.16....
- Nginx性能调优与优化指南(nginx优化配置大全)
-
Nginx性能调优需要结合服务器硬件资源、业务场景和负载特征进行针对性优化。以下是一些关键优化方向和具体配置示例:一、Nginx配置优化1.进程与连接数优化nginxworker_process...
- C++后端开发必须彻底搞懂Nginx,从原理到实战(高级篇)
-
本文为Nginx实操高级篇。通过配置Nginx配置文件,实现正向代理、反向代理、负载均衡、Nginx缓存、动静分离和高可用Nginx6种功能,并对Nginx的原理作进一步的解析。当需...
- 【Nginx】史上最全的Nginx配置详解
-
Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。Nginx是非常重要的负载均衡中间件,被广泛应用于大型...
- 【Nginx】Nginx 4种常见配置实例(nginx基本配置与参数说明)
-
本文主要介绍nginx4种常见的配置实例。Nginx实现反向代理;Nginx实现负载均衡;Nginx实现动静分离;Nginx实现高可用集群;Nginx4种常见配置实例如下:一、Nginx反向代理配...
- 使用nginx+allure管理自动化测试报告
-
allure在自动化测试中经常用来生成漂亮的报告,但是网上及官网上给出的例子都仅仅是针对单个测试用例文件的形式介绍的,实际使用中,自动化测试往往需要包含不止一个产品或项目,本文介绍如何使用nginx+...
- nginx配置文件详解(nginx配置文件详解高清版)
-
Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django,Flask,et...
- SpringCloud Eureka-服务注册与发现
-
1.Eureka介绍1.1学习Eureka前的说明目前主流的服务注册&发现的组件是Nacos,但是Eureka作为老牌经典的服务注册&发现技术还是有必要学习一下,原因:(1)一些早期的分布式微服...
- 微服务 Spring Cloud 实战 Eureka+Gateway+Feign+Hystrix
-
前言我所在项目组刚接到一个微服务改造需求,技术选型为SpringCloud,具体需求是把部分项目使用SpringCloud技术进行重构。本篇文章中介绍了Eureka、Gateway、Fe...
- 深度剖析 Spring Cloud Eureka 底层实现原理
-
你作为一名互联网大厂后端技术开发人员,在构建分布式系统时,是不是常常为服务的注册与发现而头疼?你是否好奇,像SpringCloudEureka这样被广泛使用的组件,它的底层实现原理到底是怎样的...
- 热爱生活,喜欢折腾。(很热爱生活)
-
原文是stackoverflow的一则高票回答,原文链接可能之前也有人翻译过,但是刚好自己也有疑惑,所以搬运一下,个人水平有限所以可能翻译存在误差,欢迎指正(如侵删)。尽管classmethod和st...
- GDB调试的高级技巧(详细描述gdb调试程序的全过程)
-
GDB是我们平时调试c/c++程序的利器,查起复杂的bug问题,比打印大法要好得多,但是也不得不说,gdb在默认情况下用起来并不是很好用,最近学习到几个高级点的技巧,分享下:一美化打印先上个例子...
- Arduino 实例(二十三)Arduino 给Python 编译器发送信息
-
1首先Python需要安装Pyserial库,在命令提示符中输入pipintallpyserial若是遇到提示‘pip‘不是内部或外部命令,也不是可运行的程序或批处理文件,则需要设置环境变...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- skip-name-resolve (63)
- linuxlink (65)
- pythonwget (67)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)