win32api之文件系统管理(七)
什么是文件系统
文件系统是一种用于管理计算机存储设备上文件和目录的机制。文件系统为文件和目录分配磁盘空间,管理文件和目录的存储和检索,以及提供对它们的访问和共享,以下是常见的两种文件系统:
NTFS | FAT32 | |
---|---|---|
磁盘分区容量 | 2T | 32G |
单个文件容量 | 4G以上 | 最大4G |
EFS加密 | 支持 | 不支持 |
磁盘配额 | 支持 | 不支持 |
什么是卷
卷是操作系统对磁盘分区的逻辑抽象,可以看作是磁盘分区的容器。在一个物理磁盘中可以分为多个卷,每个卷可以分配不同的文件系统,从而实现对数据的管理和存储
每个卷都有一个唯一的卷标识符,可以通过这个标识符来访问和管理它的数据
卷相关API
GetLogicalDrives
GetLogicalDrivers函数用于获取当前系统中存在卷的数量,其返回值为一个32位无符号整数,每个比特位表示一个卷的状态。若比特位为1,则代表对应的卷存在,其语法格式如下:
DWORD GetLogicalDrives(void);
以下是常见的返回值以及对应的含义:
- 返回值为0x01(二进制为0001):表示只有A盘存在
- 返回值为0x02(二进制为0010):表示只有B盘存在;
- 返回值为0x03(二进制为0011):表示A盘和B盘都存在;
- 返回值为0x04(二进制为0100):表示只有C盘存在;
- 返回值为0x0C(二进制为1100):表示只有C盘和D盘存在
- 返回值为0X0F(二进制为1111):表示ABCD盘都存在
GetLogicalDriveStrings
GetLogicalDriveStrings函数用于获取系统上所有逻辑驱动器的名称和根目录,换句话说就是获取卷的标识符,函数调用成功后,函数返回值为返回的字符数组中的字符数,若函数失败,则返回值为0
其语法格式如下:
DWORD GetLogicalDriveStrings(DWORD nBufferLength, //存储驱动器名称的缓冲区的大小LPTSTR lpBuffer //指向缓冲区的指针
);
GetDriveType
GetDriveType函数用于获取指定驱动器的类型
UINT GetDriveType(LPCWSTR lpRootPathName //要获取其驱动器类型的根目录路径
);
其返回值是一个整数,代表驱动器的类型,取值如下:
-
DRIVE_UNKNOWN(0):未知类型的驱动器。
-
DRIVE_NO_ROOT_DIR(1):驱动器不存在或根路径无效。
-
DRIVE_REMOVABLE(2):可移动磁盘。
-
DRIVE_FIXED(3):固定磁盘。
-
DRIVE_REMOTE(4):网络驱动器。
-
DRIVE_CDROM(5):光盘驱动器。
-
DRIVE_RAMDISK(6):RAM磁盘。
GetVolumeInformation
GetVolumeInformation函数用于获取卷的相关信息(如卷名称、文件系统、卷序列号等)。如果函数执行成功,则返回值为TRUE;如果执行失败,则返回值为FALSE
其语法格式如下:
BOOL GetVolumeInformation(LPCWSTR lpRootPathName, // IN 指定驱动器的根路径LPWSTR lpVolumeNameBuffer, // OUT 接收卷名称的缓冲区DWORD nVolumeNameSize, // IN 缓冲区大小(以字符数为单位)LPDWORD lpVolumeSerialNumber, // OUT 接收卷序列号的指针LPDWORD lpMaximumComponentLength, // OUT 接收最大文件名称长度的指针LPDWORD lpFileSystemFlags, // OUT 接收文件系统标识的指针LPWSTR lpFileSystemNameBuffer, // OUT 接收文件系统名称的缓冲区DWORD nFileSystemNameSize // IN文件系统名称缓冲区大小
);
使用实例
include <windows.h>
include <bitset>int main()
{ //获取卷的数量DWORD dwLogicalDrivers = GetLogicalDrives();//将十进制转换成二进制并输出std::bitset<8> bits(dwLogicalDrivers);std::cout <<"卷的状态是:"<< bits.to_string()<<std::endl;// 遍历所有卷的标识符TCHAR szBuffer[100];GetLogicalDriveStrings(20, szBuffer);std::cout << "卷的标识符有:";for (TCHAR* drive = szBuffer; *drive != '\0'; drive += lstrlen(drive) + 1) {std::cout << drive << ",";}std::cout<<std::endl;//获取卷的类型UINT DriveType = GetDriveType("D:\\");printf("卷的类型是:%u\n", DriveType);//获取卷的信息TCHAR VolumeName[200] = { 0 };DWORD VolumeSerial = 0;DWORD MaxLength = 0;DWORD FileSystemIDC = 0;TCHAR FileSystemName[200] = { 0 };GetVolumeInformation("E:\\", VolumeName, 200,&VolumeSerial,&MaxLength,&FileSystemIDC,FileSystemName,200);printf("卷名=%s\n序列号=%d\n文件系统标识=%d\n文件系统名称=%s", VolumeName, VolumeSerial,FileSystemIDC,FileSystemName);}
执行结果如下:
目录相关API
CreateDirectory
CreateDirectory函数用于创建一个新目录,其语法格式如下:
BOOL CreateDirectory(LPCTSTR lpPathName, //要创建的目录的名称和路径,可以是绝对路径或相对路径LPSECURITY_ATTRIBUTES lpSecurityAttributes //指定了新目录的安全性和访问控制
);
RemoveDirectory
RemoveDirectory函数用于删除指定目录及其所有内容
BOOL RemoveDirectory(LPCTSTR lpPathName //要删除的目录路径
);
MoveFile
MoveFile函数用于将一个文件或目录移动到新的位置,其语法格式如下:
BOOL MoveFile(LPCWSTR lpExistingFileName, //要移动的文件或目录的名称LPCWSTR lpNewFileName //移动后的新位置的路径和名称
);
GetCurrentDirectory
GetCurrentDirectory函数用于获取当前进程的工作目录。其函数原型为
DWORD GetCurrentDirectory(DWORD nBufferLength, // 缓冲区大小,单位为字节LPTSTR lpBuffer // 存储路径的缓冲区
);
SetCurrentDirectory
SetCurrentDirectory函数用于设置当前进程的工作目录,其语法格式如下:
BOOL SetCurrentDirectory(LPCWSTR lpPathName //新的进程工作目录
);
文件相关API
CreateFile
CreateFile函数是一个用于创建或打开文件, 它可以用于创建、读取、写入、修改文件, 函数返回一个文件的句柄, 若执行失败则返回无效句柄值,其语法格式如下:
HANDLE CreateFile(LPCTSTR lpFileName, //创建的文件名DWORD dwDesiredAccess, //文件访问模式DWORD dwShareMode, //共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes, //安全描述符DWORD dwCreationDisposition, //文件的创建方式DWORD dwFlagsAndAttributes, //文件的属性和标志HANDLE hTemplateFile //指定要用作新文件的属性模板的句柄
);
dwDesiredAccess参数用于指定文件的访问方式, 如下是常见的dwDesiredAccess值:
GENERIC_READ
:读取文件GENERIC_WRITE
:写入文件GENERIC_EXECUTE
:执行文件GENERIC_ALL
:允许读、写和删除文件
若要指定多个访问方式,可使用OR连接起来,如GENERIC_READ | GENERIC_WRITE
dwShareMode参数指定了其他进程是否可以访问已经打开的文件或设备,如下是常见的值:
FILE_SHARE_READ
:允许其他进程读取文件或设备。FILE_SHARE_WRITE
:允许其他进程写入文件或设备。FILE_SHARE_DELETE
:允许其他进程删除文件或设备。
默认情况下,dwShareMode的值为0,即文件或设备不能被共享访问
dwCreationDisposition
参数用于指定创建或打开文件的方式,以下是可取的值:
CREATE_NEW
:如果文件不存在,则创建文件;否则,打开失败。CREATE_ALWAYS
:如果文件不存在,则创建文件。若文件存在,则覆盖该文件OPEN_EXISTING
:打开现有文件。如果文件不存在,则打开失败,并返回错误ERROR_FILE_NOT_FOUND
。OPEN_ALWAYS
:如果文件存在,则打开文件;否则,创建文件。TRUNCATE_EXISTING
:打开现有文件,并将其长度截断为零。如果文件不存在,则打开失败,并返回错误ERROR_FILE_NOT_FOUND
。
dwFlagsAndAttributes
参数是一个标志位,它用于指定创建或打开文件时的一些特殊选项,以下是常见的值
FILE_ATTRIBUTE_ARCHIVE
:文件存档属性。如果应用程序修改了存档文件,则操作系统会自动清除此属性。FILE_ATTRIBUTE_HIDDEN
:隐藏文件或目录。FILE_ATTRIBUTE_NORMAL
:标准文件属性。此属性没有任何其他属性设置。FILE_ATTRIBUTE_READONLY
:只读文件或目录。如果应用程序尝试修改只读文件,则会导致失败。FILE_ATTRIBUTE_DIRECTORY
:指示文件是目录。
GetFileSize
GetFileSize函数用于获取文件的大小,其语法格式如下:
DWORD WINAPI GetFileSize(HANDLE hFile, //文件句柄LPDWORD lpFileSizeHigh //接收文件大小的指针变量
);
GetFileAttributeEx
GetFileAttributeEx函数用于获取指定文件或目录的属性信息,其语法格式如下:
BOOL GetFileAttributesEx(LPCWSTR lpFileName, //要获取属性的文件或目录名GET_FILEEX_INFO_LEVELS fInfoLevelId, //指定文件信息的级别,一般设为GetFileExInfoStandardLPVOID lpFileInformation //接收文件属性信息的缓冲区指针
);
以下是此函数的使用实例:
include <windows.h>
include <iostream>int main() {WIN32_FILE_ATTRIBUTE_DATA fileData; // 创建WIN32_FILE_ATTRIBUTE_DATA结构体变量fileDataif (GetFileAttributesEx(L"C:\\Windows", GetFileExInfoStandard, &fileData)) { // 获取"C:\\Windows"目录的文件属性,并将属性信息保存在fileData中std::cout << "SizeHigh: " << fileData.nFileSizeHigh << std::endl; // 输出文件大小的高32位std::cout << "SizeLow: " << fileData.nFileSizeLow << std::endl; // 输出文件大小的低32位std::cout << "FileAttributes: " << fileData.dwFileAttributes << std::endl; // 输出文件属性std::cout << "CreationTime: " << fileData.ftCreationTime.dwLowDateTime << std::endl; // 输出创建时间的低32位std::cout << "LastAccessTime: " << fileData.ftLastAccessTime.dwLowDateTime << std::endl; // 输出最后访问时间的低32位std::cout << "LastWriteTime: " << fileData.ftLastWriteTime.dwLowDateTime << std::endl; // 输出最后修改时间的低32位}return 0;
}
SetFilePointer
SetFilePointer函数用于设置文件指针的位置, 如果函数执行成功,则返回文件指针的新位置, 它的语法如下:
DWORD SetFilePointer(HANDLE hFile, // 文件句柄LONG lDistanceToMove, // 文件指针移动的距离,可以为正或负,负数表示向前移动,正数表示向后移动PLONG lpDistanceToMoveHigh, // 文件指针移动的高位,常置为NULLDWORD dwMoveMethod // 文件指针的起始位置
);
dwMoveMethod参数表示文件指针的起始位置, 以下是常见值:
FILE_BEGIN
:文件开头。FILE_CURRENT
:文件指针当前位置。FILE_END
:文件结尾。
ReadFile
ReadFile函数用于从文件中读取数据, 果读取成功,则函数返回TRUE,否则返回FALSE
它的语法格式如下:
BOOL ReadFile(HANDLE hFile, //要读取的文件的句柄LPVOID lpBuffer, //指向缓冲区的指针,用于存储从文件中读取的数据DWORD nNumberOfBytesToRead, //要读取的字节数LPDWORD lpNumberOfBytesRead, //指向一个变量的指针,用于接收实际读取的字节数数LPOVERLAPPED lpOverlapped //指向OVERLAPPED结构体的指针,用于支持异步I/O操作,可以传递NULL以进行同步操作
);
WriteFile
WriteFile函数用于将数据写入到文件,其语法格式如下:
BOOL WriteFile(HANDLE hFile, //文件句柄LPCVOID lpBuffer, //指向待写入数据的缓冲区指针DWORD nNumberOfBytesToWrite, //待写入数据的字节数LPDWORD lpNumberOfBytesWritten, //用于接收实际写入的字节数的指针LPOVERLAPPED lpOverlapped
);
CopyFile
CopyFile函数用于将一个文件复制到另一个位置,其语法格式如下:
BOOL CopyFile(LPCWSTR lpExistingFileName, // 源文件名LPCWSTR lpNewFileName, // 目标文件名BOOL bFailIfExists // 目标文件存在时是否覆盖
);
DeleteFile
Delete函数用于删除指定路径下的文件,其语法格式如下:
BOOL DeleteFile(LPCWSTR lpFileName //要删除的文件的路径
);
FindFirstFile
FindFirstFile
函数用于查找指定目录中的第一个文件或子目录,并返回句柄以供以后的查找使用,通过该句柄可以遍历该目录下的所有符合条件的文件或目录,其语法格式如下所示:
HANDLE FindFirstFile(LPCTSTR lpFileName, // 文件名或路径模板LPWIN32_FIND_DATA lpFindFileData // 指向 WIN32_FIND_DATA结构的指针
);
FindNextFile
FindNextFile
函数是在使用 FindFirstFile
函数后,用于在指定的目录中继续查找符合条件的文件或目录的函数,其语法格式如下:
BOOL FindNextFile(HANDLE hFindFile, // FindFirstFile函数返回的句柄LPWIN32_FIND_DATA lpFindFileData // WIN32_FIND_DATA 结构体指针,保存查找到的文件信息
);
以下代码用于遍历E盘目录下的所有txt文件
include <Windows.h>
include <iostream>
include <string>int main()
{ std::string path = "E:\\*.txt";WIN32_FIND_DATAA FindFileData;HANDLE hFind = FindFirstFileA(path.c_str(), &FindFileData);if (hFind == INVALID_HANDLE_VALUE) {std::cerr << "Failed to find file." << std::endl;return 1;}do {std::cout << FindFileData.cFileName << std::endl;} while (FindNextFileA(hFind, &FindFileData));FindClose(hFind); //释放文件句柄return 0;
}
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/c0973c9e2afe654d4985908dc3bae25d.png)
win32api之文件系统管理(七)
什么是文件系统 文件系统是一种用于管理计算机存储设备上文件和目录的机制。文件系统为文件和目录分配磁盘空间,管理文件和目录的存储和检索,以及提供对它们的访问和共享,以下是常见的两种文件系统: NTFSFAT32磁盘分区容量2T32G…...
![](https://www.ngui.cc/images/no-images.jpg)
点云规则格网化,且保存原始的点云索引
点云规则格网化,且保存原始的点云索引 点云深度学习Voxelize规则,参考PTV2:https://github.com/Gofinge/PointTransformerV2 1总执行文件 import numpy as np import torch from pcr.utils.registry import Registry TRANSFORMS Registry…...
![](https://img-blog.csdnimg.cn/576f0a1b590b48608c2a1ebc778f7936.png)
入职第一天就被迫离职,找工作多月已读不回,面试拿不到offer我该怎么办?
大多数情况下,测试员的个人技能成长速度,远远大于公司规模或业务的成长速度。所以,跳槽成为了这个行业里最常见的一个词汇。 前言 前几天,我们一个粉丝跟我说,正常入职一家外包,什么都准备好了࿰…...
![](https://img-blog.csdnimg.cn/img_convert/9fdf1b88b2992ec97434f82c4fa32d23.png)
走进Vue【三】vue-router详解
目录🌟前言🌟路由🌟什么是前端路由?🌟前端路由优点缺点🌟vue-router🌟安装🌟路由初体验1.路由组件router-linkrouter-view2.步骤1. 定义路由组件2. 定义路由3. 创建 router 实例4. 挂…...
![](https://img-blog.csdnimg.cn/10beb06b21424085847147ed2525c535.png)
html+css制作
<!DOCTYPE html> <html><head><meta charset"utf-8"><title>校园官网</title><style type"text/css">*{padding: 0;margin: 0;}#logo{width:30%;float: left;}.nav{width: 100%;height: 100px;background-color…...
![](https://www.ngui.cc/images/no-images.jpg)
Python实现rar、zip和7z文件的压缩和解压
一、7z压缩文件的压缩和解压 1、安装py7zr 我们要先安装py7zr第三方库: pip install py7zr如果python环境有问题,执行上面那一条安装语句老是安装在默认的python环境的话,我们可以执行下面这条语句,将第三方库安装在项目的虚拟…...
![](https://img-blog.csdnimg.cn/182a06eefb2748de9acbad4838029d7d.jpeg#pic_center)
从Hive源码解读大数据开发为什么可以脱离SQL、Java、Scala
从Hive源码解读大数据开发为什么可以脱离SQL、Java、Scala 前言 【本文适合有一定计算机基础/半年工作经验的读者食用。立个Flg,愿天下不再有肤浅的SQL Boy】 谈到大数据开发,占据绝大多数人口的就是SQL Boy,不接受反驳,毕竟大…...
![](https://img-blog.csdnimg.cn/223ad4f512784e21af7938af3993ee97.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP546L5pu-5piv5bCR5bm0,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center)
RocketMQ 事务消息 原理及使用方法解析
🍊 Java学习:Java从入门到精通总结 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年3月24日 &#x…...
![](https://img-blog.csdnimg.cn/0fc52e80716941e39883a0f07379def2.gif)
为什么 ChatGPT 输出时经常会中断,需要输入“继续” 才可以继续输出?
作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...
![](https://img-blog.csdnimg.cn/b53e7b380d2d40cdaaf86f49dd7792a0.png)
PyTorch 之 基于经典网络架构训练图像分类模型
文章目录一、 模块简单介绍1. 数据预处理部分2. 网络模块设置3. 网络模型保存与测试二、数据读取与预处理操作1. 制作数据源2. 读取标签对应的实际名字3. 展示数据三、模型构建与实现1. 加载 models 中提供的模型,并且直接用训练的好权重当做初始化参数2. 参考 pyto…...
![](https://img-blog.csdnimg.cn/9baca07b7f8a4ea38cc2c6cce3f54f25.png)
Scrapy的callback进入不了回调方法
一、前言 有的时候,Scrapy的callback方法直接被略过了,不去执行其中的回调方法,可能排查好久都排查不出来,我来教大家集中解决方法。 yield Request(urlurl, callbackself.parse_detail, cb_kwargs{item: item})二、解决方法 1…...
![](https://img-blog.csdnimg.cn/img_convert/8013ccd04fe753aac638052f290273c0.jpeg)
第二十一天 数据库开发-MySQL
目录 数据库开发-MySQL 前言 1. MySQL概述 1.1 安装 1.2 数据模型 1.3 SQL介绍 1.4 项目开发流程 2. 数据库设计-DDL 2.1 数据库操作 2.2 图形化工具 2.3 表操作 3. 数据库操作-DML 3.1 增加(insert) 3.2 修改(update) 3.3 删除(delete) 数据库开发-MySQL 前言 …...
![](https://img-blog.csdnimg.cn/0d58f8f68de049578f0c9dbc99ecc06e.png)
蓝桥杯每日一真题—— [蓝桥杯 2021 省 AB2] 完全平方数(数论,质因数分解)
文章目录[蓝桥杯 2021 省 AB2] 完全平方数题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示思路:理论补充:完全平方数的一个性质:完全平方数的质因子的指数一定为偶数最终思路:小插曲&am…...
![](https://img-blog.csdnimg.cn/93fd6a9012b242e4b6fb83684b4ce88d.png)
Linux编辑器-vim
一、vim简述1)vi/vim2)检查vim是否安装2)如何用vim打开文件3)vim的几种模式命令模式插入模式末行模式可视化模式二、vim的基本操作1)进入vim(命令行模式)2)[命令行模式]切换至[插入模式]3)[插入模式]切换至[命令行模式]4)[命令行模…...
![](https://img-blog.csdnimg.cn/img_convert/59ceeb76bdd11156794475c5159f1470.jpeg)
5G将在五方面彻底改变制造业
想象一下这样一个未来,智能机器人通过在工厂车间重新配置自己,从多条生产线上组装产品。安全无人机处理着从监视入侵者到确认员工停车等繁琐的任务。自动驾驶汽车不仅可以在建筑物之间运输零部件,还可以在全国各地运输。工厂检查可以在千里之…...
![](https://www.ngui.cc/images/no-images.jpg)
http和https的区别?
http和https的区别?HTTPHTTPSHTTP与HTTPS区别HTTPS相比于HTTP协议的优点和缺点HTTP http是超文本传输协议 HTTP协议是基于传输层的TCP协议进行通信,通用无状态的协议。80端口 HTTPS https—安全的超文本传输协议 是以安全为目标的HTTP通道,…...
![](https://img-blog.csdnimg.cn/b992cc7067294b77b4420411b3d6e7d1.png)
【Spring Cloud Alibaba】4.创建服务消费者
文章目录简介开始搭建创建项目修改POM文件添加启动类添加配置项添加Controller添加配置文件启动项目测试访问Nacos访问接口查看端点检查简介 接下来我们创建一个服务消费者,本操作先要完成之前的步骤,详情请参照【Spring Cloud Alibaba】Spring Cloud A…...
![](https://img-blog.csdnimg.cn/cf214be6efa24ba8a7d92550aa1ec88b.png)
C语言——动态内存管理 malloc、calloc、realloc、free的使用
目录 一、为什么存在动态内存分配 二、动态内存函数的介绍 2.1malloc和free 2.2calloc 2.3realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2对动态开辟空间的越界访问 3.3对非动态开辟的内存使用free释放 3.4使用free释放一块动态开辟内存的一部分 3.5…...
![](https://img-blog.csdnimg.cn/202bf9370c0d4fad86b5131406be8072.png)
技术分享——Java8新特性
技术分享——Java8新特性1.背景2. 新特性主要内容3. Lambda表达式4. 四大内置核心函数式接口4.1 Consumer<T>消费型接口4.2 Supplier<T>供给型接口4.3 Function<T,R>函数型接口4.4 Predicate<T> 断定型接口5. Stream流操作5.1 什么是流以及流的类型5.2…...
![](https://www.ngui.cc/images/no-images.jpg)
vue基础知识大全
1,指令作用 以v-开头,由vue提供的attribute,为渲染DOM应用提供特殊的响应式行为,也即是在表达式的值发生变化的时候响应式的更新DOM。其内容为可以被求值的js代码,可以写在return后面被返回的表达式。 指令的简写指令简…...
![](https://img-blog.csdnimg.cn/b0f0bff7aca94ffbb7203bc01a43c374.png)
第2篇|文献研读|nature climate change|减缓气候变化和促进热带生物多样性的碳储量走廊
研究背景 从 2000 年到 2012 年,潮湿和干燥热带地区的森林总损失超过 90,000 平方公里 yr-1,这主要是由农业扩张驱动的。热带森林砍伐向大气中排放 0:95 Pg C yr-1 并导致广泛的生物多样性丧失。保护区的生物多样性取决于与保护区所在的更广泛景观的生态…...
![](https://img-blog.csdnimg.cn/img_convert/532108f1df0075b28e8890d6b9d70a71.png)
从暴力递归到动态规划(2)小乖,你也在为转移方程而烦恼吗?
前引:继上篇我们讲到暴力递归的过程,这一篇blog我们将继续对从暴力递归到动态规划的实现过程,与上篇类似,我们依然采用题目的方式对其转化过程进行论述。上篇博客:https://blog.csdn.net/m0_65431718/article/details/…...
![](https://www.ngui.cc/images/no-images.jpg)
Leetcode.1638 统计只差一个字符的子串数目
题目链接 Leetcode.1638 统计只差一个字符的子串数目 Rating : 1745 题目描述 给你两个字符串 s和 t,请你找出 s中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是 t串的子串。换言之,请你找到 s和 t串中 恰…...
![](https://img-blog.csdnimg.cn/5a285a08269749caaecced56648116fb.png)
KoTime:v2.3.9新增线程管理(线程统计、状态查询等)
功能概览 KoTime的开源版本已经迭代到了V2.3.9,目前功能如下: 实时监听方法,统计运行时长web展示方法调用链路,瓶颈可视化追踪追踪系统异常,精确定位到方法接口超时邮件通知,无需实时查看线上热更新&…...
![](https://img-blog.csdnimg.cn/ce1dfec2e8084eb7b67689326637c038.png)
直面风口,未来不仅是中文版ChatGPT,还有AGI大时代在等着我们
说到标题的AI2.0这个概念的研究早在2015年就研究起步了,其实大家早已知道,人工智能技术必然是未来科技发展战略中的重要一环,今天我们就从AI2.0入手,以GPT-4及文心一言的发布为切入角度,来谈一谈即将降临的AGI时代。 关…...
![](https://img-blog.csdnimg.cn/9c9001627740413eaac8fba363fc4cc6.png)
若依微服务(ruoyi-cloud)保姆版容器编排运行
一、简介 项目gitee地址:https://gitee.com/y_project/RuoYi-Cloud 由于该项目运行有很多坑,大家可以在git克隆拷贝到本地后,执行下面的命令使master版本回退到本篇博客的版本: git reset --hard 05ca78e82fb4e074760156359d09a…...
![](https://img-blog.csdnimg.cn/e0950d57d0f149809560053994cea79e.gif#pic_center)
vue2图片预览插件
学习:vue插件开发实例-图片预览插件 vue2-pre-img-plugin的gitee代码 准备工作 准备图片与基础的样式 将iconfont下载的字体图标资源放在src/assets/iconfont目录下将准备预览的图片放到src/static/images目录下 PrevImg.vue 在plugins/PrevImg目录下ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
手写Promise源码的实现思路
Promise的使用: let promise new Promise((resolve, reject) > {resolve("OK");// reject("Error"); });console.log(promise);promise.then(value > {console.log("success"); }, error > {console.log("fail"…...
![](https://img-blog.csdnimg.cn/43a958f730f640c38e3b7c0827e2ddca.jpeg)
【数据结构】-关于树的概念和性质你了解多少??
作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 树前言一、树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表示1.4树在实际中的运用…...
![](https://img-blog.csdnimg.cn/09d3697853a742b88b67892104483722.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5a2Z5LiN5Z2aMTIwOA==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
【前端之旅】NPM必知必会
一名软件工程专业学生的前端之旅,记录自己对三件套(HTML、CSS、JavaScript)、Jquery、Ajax、Axios、Bootstrap、Node.js、Vue、小程序开发(UniApp)以及各种UI组件库、前端框架的学习。 【前端之旅】Web基础与开发工具 【前端之旅】手把手教你安装VS Code并附上超实用插件…...
![](/images/no-images.jpg)
做线上网站需要多少钱/如何做好网络推广
package com.bjpowernode.java.reflect;import com.bjpowernode.java.service.UserService;import java.lang.reflect.Method;/* 重点:必须掌握,通过反射机制怎么调用一个对象的方法?五颗星*****反射机制,让代码很具有通用性&…...
![](https://img-blog.csdnimg.cn/img_convert/0edcd830afe7333503cec9a64fdefd53.png)
有关做内购的网站/sem竞价广告
我的世界神奇宝贝模组是一个近期非常热门的模组,安装之后就可以在我的世界游戏中抓小精灵了。那么,它的基本操作其实也非常简单,下面小编将告诉大家神奇宝贝模组里具体的键位设置。R键: 放出/收回精灵。上下键:上下选择GUI界面中的精灵。O键:…...
![](/images/no-images.jpg)
无锡本地网站有哪些/惠州seo外包平台
我在垂直链中有两个视图(viewA,viewB). viewA的宽高比应始终为1:1,而viewB的高度是动态的(可能为400dp,可能为700dp)预期成绩:当viewB的高度太大而无法容纳屏幕中的两个视图时,应减小viewA的宽度(保持宽高比).实际结果:如果viewB的高度太大,则…...
![](https://img-blog.csdnimg.cn/img_convert/c094be79e905105f917128bd5b9a2318.png)
辽宁世纪兴电子商务服务中心/seo门户网站建设方案
在实现页面五花八门的有特色的ui时,我们有时会遇到要用实现一个弧形,而这样的弧形要怎么实现呢?用图片?好像不大现实,因为这样就要无故多加载一张图片了,这里我们来说说怎么用css的after伪类来实现弧形。先…...
![](/images/no-images.jpg)
揭阳网站制作服务/seo关键词排名报价
1、驱动包要升级为 mysql-connector-java-8.0.11.jar2、JDBC driver 由“com.mysql.jdbc.Driver”改为“com.mysql.cj.jdbc.Driver”3、url中加上“userSSLfalse”。否则会出现以下错误:“Establishing SSL connection withoutservers identity verification is not…...
![](/images/no-images.jpg)
郑州网站建设找哪家/培训中心
– Start 点击此处观看本系列配套视频。 什么是字典? 字典是存储键值对的数据结构。 如何构造字典? 假设我们要构建字典 {“one”: 1, “two”: 2, “three”: 3},Python 提供如下几种方法。 a {one: 1, two: 2, three: 3} b dict({three: 3, on…...