10.2 目录(文件夹)操作
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
10.2.1 DirectoryInfo类
DirectoryInfo类可以获得目录信息。
DirectoryInfo常用属性:
- Name:获取DirectoryInfo实例的名称,例如:c:\windows\system32将返回system32。
- FullName:获取目录或文件的完整目录。例如:c:\windows\system32将返回c:\windows\system32。
- Attributes:目录的属性。
- Exists:目录是否存在。
- CreationTime:目录的创建时间。
- LastWriteTime:目录的最后修改时间。
- Parent:目录的父目录。
DirectoryInfo常用方法:
- Create:创建目录。
- Delete:删除目录,使用此方法带参数的重载可以实现删除目录下的子目录和文件,否则只能删除空目录。
- MoveTo:移动目录。注意:此方法只能在同一个磁盘分区下移动。
- GetDirectories:返回当前目录的子目录列表,这是一个DirectoryInfo数组。
- GetFiles:返回当前目录的文件列表,这是一个FileInfo数组。关于FileInfo类,请参看第10.3.1节。
10.2.1.1 获取目录信息
【例 10.2】【项目:code10-002】获得计算机上某个目录的信息。
当选择某个文件夹后,立即在文本框中显示该文件夹的相关信息:
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.ShowNewFolderButton = false;
if (fbd.ShowDialog() != DialogResult.OK)
return;
string folderpath = fbd.SelectedPath;
DirectoryInfo di = new DirectoryInfo(folderpath);
textBox1.Text = "文件夹:" + di.Name + "\r\n";
textBox1.Text += "路径:" + di.FullName + "\r\n";
textBox1.Text += "创建日期:" + di.CreationTime.ToString("yyyy-MM-dd") + "\r\n";
textBox1.Text += "最后修改日期:" + di.LastWriteTime.ToString("yyyy-MM-dd") + "\r\n";
textBox1.Text += "属性:" + getFolderAttr(di.Attributes) + "\r\n";
}
//获得文件夹属性
private string getFolderAttr(FileAttributes attr)
{
string strAttr = "";
if((attr & FileAttributes.Archive)==FileAttributes.Archive)
strAttr += " 备份";
if ((attr & FileAttributes.Hidden) == FileAttributes.Hidden)
strAttr += " 隐藏";
if ((attr & FileAttributes.Compressed) == FileAttributes.Compressed)
strAttr += " 压缩";
if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
strAttr += " 目录";
if ((attr & FileAttributes.Encrypted) == FileAttributes.Encrypted)
strAttr += " 加密";
if ((attr & FileAttributes.Offline) == FileAttributes.Offline)
strAttr += " 脱机";
if ((attr & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
strAttr += " 只读";
if ((attr & FileAttributes.System) == FileAttributes.System)
strAttr += " 系统";
if ((attr & FileAttributes.Temporary) == FileAttributes.Temporary)
strAttr += " 临时";
return strAttr;
}
运行结果如下图所示:
图10-2 获取目录信息
10.2.1.2 获取子目录和文件
获取当前目录的子目录和所有文件主要是使用GetDirectories和GetFiles方法,这两个方法返回包含的子目录(DirectoryInfo数组)和文件(FileInfo数组),只需要分别遍历这两个数组即可获得相关信息。
【例 10.3】【项目:code10-003】获得子目录和文件。
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return;
label1.Text = fbd.SelectedPath;
DirectoryInfo di = new DirectoryInfo(label1.Text);
listBox1.Items.Clear();
//遍历当前目录下的子目录
foreach (DirectoryInfo subdi in di.GetDirectories())
{
listBox1.Items.Add("目录:" + subdi.Name);
}
//遍历当前目录下的文件
foreach (FileInfo fi in di.GetFiles())
{
listBox1.Items.Add("文件:" + fi.Name);
}
}
运行结果如下图所示:
图10-3 获得选定目录的子目录和文件
10.2.1.3 设置目录属性
通过DirectoryInfo类的Attributes属性可以获得和设置目录属性。Attributes的值是一个FileAttributes枚举,它提供了文件和目录的属性。
表10-1 FileAttributes枚举常用成员及对应属性说明
成员名称 | 对应属性说明 | 成员名称 | 对应属性说明 |
Archive | 备份 | Normal | 正常 |
Compressed | 压缩 | Offline | 脱机 |
Directory | 指示这是目录 | ReadOnly | 只读 |
Encrypted | 加密 | System | 系统 |
Hidden | 隐藏 | Temporary | 临时 |
判断现有属性是否包括某个属性,请使用:现有属性 And 某个属性:
表10-2 判断是否包含只读属性
属性 | 十进制值 | 操作 | 二进制值 | 十六进制值 | |||||||
N+R | 129 | & (And) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 81 |
ReadOnly | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
ReadOnly | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
现有属性基础上增加某个属性,请使用:现有属性 Or 某个属性:
表10-3 增加隐藏属性
属性 | 十进制值 | 操作 | 二进制值 | 十六进制值 | |||||||
Normal | 128 | | (Or) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 80 |
Hidden | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | |
N+H | 130 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 82 |
从现有属性中排除某个属性,请使用:现有属性 Xor 某个属性:
表10-4 排除只读属性
属性 | 十进制值 | 操作 | 二进制值 | 十六进制值 | |||||||
N+R | 129 | ^ (Xor) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 81 |
ReadOnly | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
Normal | 128 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 80 |
注意:微软提供的很多Api常量和.Net常量都类似于FileAttributes常量枚举,即按照 0、1、2、4、8……这样定义的,很方便使用&、|、^等位运算符。
【例 10.4】【项目:code10-004】设置目录属性。
//选择目录,并获得其属性
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return;
label1.Text = fbd.SelectedPath;
DirectoryInfo di = new DirectoryInfo(label1.Text);
//目录有只读属性,那么勾选CheckBox1
if ((di.Attributes & FileAttributes.ReadOnly) ==FileAttributes.ReadOnly )
checkBox1.Checked = true;
//目录有隐藏属性,那么勾选CheckBox2
if ((di.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
checkBox2.Checked = true;
//目录有系统属性,那么勾选CheckBox3
if ((di.Attributes & FileAttributes.System) == FileAttributes.System)
checkBox3.Checked = true;
}
//设置指定目录的属性
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(label1.Text);
if (di.Exists == false)
return;
FileAttributes fa = di.Attributes;
if ((fa & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
//如果有只读属性,而设置取消只读,那么使用异或方式
if (checkBox1.Checked == false)
fa = fa ^ FileAttributes.ReadOnly;
}
else
{
//如果没有只读属性,而设置只读,那么使用或方式
if (checkBox1.Checked == true)
fa = fa | FileAttributes.ReadOnly;
}
if ((fa & FileAttributes.Hidden) == FileAttributes.Hidden)
{
//如果有隐藏属性,而设置取消隐藏,那么使用异或方式
if (checkBox2.Checked == false)
fa = fa ^ FileAttributes.Hidden;
}
else
{
//如果没有隐藏属性,而设置隐藏,那么使用或方式
if (checkBox2.Checked == true)
fa = fa | FileAttributes.Hidden;
}
if ((fa & FileAttributes.System) == FileAttributes.System)
{
//如果有系统属性,而设置取消系统,那么使用异或方式
if (checkBox3.Checked == false)
fa = fa ^ FileAttributes.System;
}
else
{
//如果没有系统属性,而设置系统,那么使用或方式
if (checkBox3.Checked == true)
fa = fa | FileAttributes.System;
}
//目录设置新属性
di.Attributes = fa;
}
运行结果如下图所示:
图10-4 设置目录属性并使用attrib命令验证
10.2.1.4 目录的创建、删除和移动
目录的创建、删除和移动分别使用到了DirectoryInfo类的Create、Delete和MoveTo方法。
【例 10.5】【项目:code10-005】目录的创建、删除和移动。
//获得源目录路径
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return;
label1.Text = fbd.SelectedPath;
}
//获得目标目录路径
private void button2_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return;
label2.Text = fbd.SelectedPath;
}
//在源目录下创建一个子目录 csharp
private void button3_Click(object sender, EventArgs e)
{
if (label1.Text == "")
return;
string newFolder = label1.Text.Substring(label1.Text.Length - 1, 1) == "\\" ?
label1.Text.Substring(0, label1.Text.Length - 1) :
label1.Text;
DirectoryInfo di = new DirectoryInfo(newFolder + "\\csharp");
if(di.Exists )
{
MessageBox.Show("目录已经存在,不能创建该目录。", "错误信息");
return;
}
di.Create();
MessageBox.Show("目录创建成功。", "提示信息");
}
//删除源目录
private void button4_Click(object sender, EventArgs e)
{
if (label1.Text == "")
return;
DirectoryInfo di = new DirectoryInfo(label1.Text );
if (di.Parent == null)
{
MessageBox.Show("为确保文件安全,不允许删除根目录", "错误信息");
return;
}
if(di.Exists )
{
try
{
if (MessageBox.Show("确实要删除此目录?", "警告信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
return;
di.Delete(true);
MessageBox.Show("目录已经成功删除。", "提示信息");
}
catch(Exception ex)
{
MessageBox.Show("删除目录时发生错误:" + ex.Message, "错误信息");
}
}
else
{
MessageBox.Show("目录不存在。", "错误信息");
}
}
//移动源目录到目标目录,注意:必须在同一分区下移动
private void button5_Click(object sender, EventArgs e)
{
if (label1.Text == "" | label2.Text == "")
return;
DirectoryInfo di = new DirectoryInfo(label1.Text);
string toFolder;
toFolder = label2.Text.Substring(label2.Text.Length - 1, 1) == "\\" ? label2.Text : label2.Text + "\\";
toFolder = toFolder + di.Name;
if(di.Exists)
{
try
{
di.MoveTo(toFolder);
MessageBox.Show("目录移动完成。", "提示信息");
}
catch(Exception ex)
{
MessageBox.Show("移动目录时发生错误:"+ ex.Message, "错误信息");
}
}
else
{
MessageBox.Show("目录不存在。", "错误信息");
}
}
运行结果如下图所示:
图10-5目录的创建、删除和移动
10.2.2 Directory类
除了DirictoryInfo类外,VB.Net还提供了Directory类来操作目录、获得目录信息。
Directory类与DirectoryInfo类相比,Directory没有属性,提供的方法都是静态方法,可以直接使用;而DirectoryInfo的方法需要类实例化后使用。
其实DirectoryInfo的一些方法甚至就是调用Directory对应的方法。
Directory常用方法:
- CreateDirectory:创建目录。
- Delete:删除目录。
- Move:移动目录。
- GetLogicalDrives:检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称,这是一个字符串数组。
- GetDirectories:子目录的名称(包括其路径),这是一个字符串数组。
- GetFiles:目录中文件的名称(包括其路径),这是一个字符串数组。
- GetCreationTime:获得目录创建时间。
- GetLastWriteTime:获得目录最后修改时间。
- GetLastAccessTime:获得目录最后访问时间。
- GetParent:获得父目录,这是一个DirectoryInfo类型。
- SetCreationTime:设置目录创建时间。
- SetLastWriteTime:设置目录最后修改时间。
- SetLastAccessTime:设置目录最后访问时间。
- GetCurrentDirecotry:获得程序所在路径。
- Exists:目录是否存在。
10.2.2.1 获取目录信息
【例 10.6】【项目:code10-006】获取某个目录的信息。
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.ShowNewFolderButton = false;
if (fbd.ShowDialog() !=DialogResult.OK)
return;
string folderPath = fbd.SelectedPath;
textBox1.Text += "路径:" + folderPath + "\r\n";
textBox1.Text += "根目录:" + Directory.GetDirectoryRoot(folderPath) + "\r\n";
if (Directory.GetParent(folderPath)!=null)
textBox1.Text += "父目录:" + Directory.GetParent(folderPath).FullName + "\r\n";
textBox1.Text += "创建日期:" + Directory.GetCreationTime(folderPath).ToString("yyyy-MM-dd") + "\r\n";
textBox1.Text += "最后修改日期:" + Directory.GetLastWriteTime(folderPath).ToString("yyyy-MM-dd") + "\r\n";
textBox1.Text += "最后访问日期:" + Directory.GetLastAccessTime(folderPath).ToString("yyyy-MM-dd");
}
运行结果如下图所示:
图10-6 获取目录信息
10.2.2.2 获取子目录和文件
获取当前目录的子目录和所有文件主要是使用GetDirectories和GetFiles方法,这两个方法不同于DirectoryInfo类提供的方法,它们返回的是包含的子目录和文件的全路径的字符串数组。
【例 10.7】【项目:code10-007】获得子目录和文件。
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return;
listBox1.Items.Clear();
string selPath = fbd.SelectedPath;
//遍历所有的子目录
foreach ( string subdirectory in Directory.GetDirectories(selPath))
{
listBox1.Items.Add("目录" + subdirectory);
}
//遍历所有的文件
foreach (string file in Directory.GetFiles(selPath))
{
listBox1.Items.Add("文件" + file);
}
}
运行结果同【例 10.3】。
10.2.2.3 目录的创建、删除和移动
目录的创建、删除和移动分别使用到了Directory类的CreateDirectory、Delete和Move方法。
【例 10.8】【项目:code10-008】目录的创建、删除和移动。
//获得源目录路径
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return;
label1.Text = fbd.SelectedPath;
}
//获得目标目录路径
private void button2_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return;
label2.Text = fbd.SelectedPath;
}
//在源目录下创建一个子目录 csharp
private void button3_Click(object sender, EventArgs e)
{
string newFolder = label1.Text.Substring(label1.Text.Length - 1, 1) == "\\" ? label1.Text.Substring(0, label1.Text.Length - 1) : label1.Text;
newFolder += "\\csharp";
if (Directory.Exists(newFolder))
{
MessageBox.Show("目录已经存在,不能创建该目录。", "错误信息");
return;
}
Directory.CreateDirectory(newFolder);
MessageBox.Show("目录创建成功。", "提示信息");
}
//删除源目录
private void button4_Click(object sender, EventArgs e)
{
if (label1.Text == "")
return;
string folder = label1.Text;
if (Directory.GetParent(folder) == null)
MessageBox.Show("为确保文件安全,不允许删除根目录", "错误信息");
return;
if(Directory.Exists (folder))
{
try
{
if (MessageBox.Show("确实要删除此目录?", "警告信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
return;
//调用Delete方法删除,参数True表示要删除该目录中的子目录和文件
Directory.Delete(folder, true);
//如果使用不带参数的方法只能是删除空目录
Directory.Delete(folder);
MessageBox.Show("目录已经成功删除。", "提示信息");
}
catch(Exception ex)
{
MessageBox.Show("删除目录时发生错误:" + ex.Message, "错误信息");
}
}
else
{
MessageBox.Show("目录不存在。", "错误信息");
}
}
//移动源目录到目标目录
//注意必须在同一分区下移动
private void button5_Click(object sender, EventArgs e)
{
if (label1.Text == "" | label2.Text == "")
return;
DirectoryInfo di = new DirectoryInfo(label1.Text);
string toFolder = label2.Text.Substring(label2.Text.Length - 1, 1) == "\\" ? label2.Text : label2.Text + "\\";
toFolder += di.Name;
if(Directory.Exists(label1.Text))
{
try
{
//调用MoveTo方法移动
Directory.Move(label1.Text, toFolder);
MessageBox.Show("目录移动完成。", "提示信息");
}
catch (Exception ex)
{
MessageBox.Show("移动目录时发生错误:" + ex.Message, "错误信息");
}
}
else
{
MessageBox.Show("目录不存在。", "错误信息");
}
}
运行结果同【例 10.5】。
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录
相关文章:

10.2 目录(文件夹)操作
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 10.2.1 DirectoryInfo类 DirectoryInfo类可以获得目录信息。 DirectoryInfo常用属性: Name:获取Director…...

LiteFlow Spring boot使用方式
文章目录 概述LiteFlow框架的优势规则调用逻辑规则组件定义组件内数据获取通过 DefaultContext自定义上下文 通过 组件规则定义数据通过预先传入数据 liteflow 使用 概述 在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻…...
OSCP:Windows 服务提权详解
在Windows操作系统中,服务是一种特殊的后台进程,它们通常以较高的权限(如 SYSTEM 或 Administrator)运行。攻击者可以通过控制服务的创建、配置或运行过程实现权限提升(提权)。本文将详细分析Windows服务提…...

星火大模型接入及文本生成HTTP流式、非流式接口(JAVA)
文章目录 一、接入星火大模型二、基于JAVA实现HTTP非流式接口1.配置2.接口实现(1)分析接口请求(2)代码实现 3.功能测试(1)测试对话功能(2)测试记住上下文功能 三、基于JAVA实现HTTP流…...

21.Word:小赵-毕业论文排版❗【39】
目录 题目 NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 题目 NO1.2 自己的论文当中接收老师的修改:审阅→比较→源文档:考生文件夹:Word.docx→修订的文档:考生文件夹:教师修改→确定→接收→接收所有修订将合并之…...

Python中的函数(上)
Python中的函数是非常重要的编程概念,以下是详细的介绍: 函数定义基础 在Python中,函数是组织好的、可重复使用的代码块,用于执行特定任务。通过函数,我们可以将复杂的程序分解为较小的、更易管理的部分,…...

Windows11 安装poetry
使用powershell安装 (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py - 如果使用py运行失败则替换为python即可 终端运行结果如下 D:\AI\A_Share_investment_Agent> (Invoke-WebRequest -Uri https://install.python-poetry.…...
浅谈Linux 权限、压缩、进程与服务
概述 放假回家,对Linux系统的一些知识进行重新的整理,做到温故而知新,对用户权限管理、文件赋权、压缩文件、进程与服务的知识进行了一次梳理和总结。 权限管理 Linux最基础的权限是用户和文件,先了解基础的用户权限和文件权限…...
006 LocalStorage和SessionStorage
JWT存储在LocalStorage与SessionStorage里的区别和共同点如下: 区别 数据有效期: • LocalStorage:始终有效,存储的数据会一直保留在浏览器中,即使窗口或浏览器关闭也一直保存,因此常用作持久数据。 • Se…...
AJAX RSS Reader:技术解析与应用场景
AJAX RSS Reader:技术解析与应用场景 引言 随着互联网的快速发展,信息量呈爆炸式增长。为了方便用户快速获取感兴趣的信息,RSS(Really Simple Syndication)技术应运而生。AJAX RSS Reader作为一种基于AJAX技术的信息读取工具,在用户体验和信息获取方面具有显著优势。本…...
Go优雅实现redis分布式锁
前言 系统为了保证高可用,通常会部署多实例,并且会存在同时对共享资源并发读写,这时候为了保证读写的安全,常规手段是会引入分布式锁,本文将介绍如何使用redis设计一个优雅的Go分布式锁。 设计 redis分布式锁是借助…...

本地部署deepseek模型步骤
文章目录 0.deepseek简介1.安装ollama软件2.配置合适的deepseek模型3.安装chatbox可视化 0.deepseek简介 DeepSeek 是一家专注于人工智能技术研发的公司,致力于打造高性能、低成本的 AI 模型,其目标是让 AI 技术更加普惠,让更多人能够用上强…...

(2025 年最新)MacOS Redis Desktop Manager中文版下载,附详细图文
MacOS Redis Desktop Manager中文版下载 大家好,今天给大家带来一款非常实用的 Redis 可视化工具——Redis Desktop Manager(简称 RDM)。相信很多开发者都用过 Redis 数据库,但如果你想要更高效、更方便地管理 Redis 数据&#x…...

C++ 写一个简单的加减法计算器
************* C topic:结构 ************* Structure is a very intersting issue. I really dont like concepts as it is boring. I would like to cases instead. If I want to learn something, donot hesitate to make shits. Like building a house. Wh…...

计算机网络基础 - 链路层(3)
计算机网络基础 链路层和局域网交换局域网链路层寻址地址解析协议 ARP以太网物理拓扑以太网帧结构以太网提供的服务以太网标准 链路层交换机交换机转发和过滤自学习交换机优点交换机和路由器比较 大家好呀!我是小笙,本章我主要分享计算机网络基础 - 链路…...
ray.rllib 入门实践-5: 训练算法
前面的博客介绍了ray.rllib中算法的配置和构建,也包含了算法训练的代码。 但是rllib中实现算法训练的方式不止一种,本博客对此进行介绍。很多教程使用 PPOTrainer 进行训练,但是 PPOTrainer 在最近的 ray 版本中已经取消了。 环境配置&#x…...

FPGA 使用 CLOCK_LOW_FANOUT 约束
使用 CLOCK_LOW_FANOUT 约束 您可以使用 CLOCK_LOW_FANOUT 约束在单个时钟区域中包含时钟缓存负载。在由全局时钟缓存直接驱动的时钟网段 上对 CLOCK_LOW_FANOUT 进行设置,而且全局时钟缓存扇出必须低于 2000 个负载。 注释: 当与其他时钟约束配合…...
选择的阶段性质疑
条条大路通罗马,每个人选择的道路,方向并不一样,但不妨碍都可以到达终点,而往往大家会更推崇自己走过的路径。 自己靠什么走向成功,自己用了什么方法,奉行什么原则或者理念,也会尽可能传播这种&…...
固有频率与模态分析
目录 引言 1. 固有频率:物体的“天生节奏” 1.1 定义 1.2 关键特点 1.3 实际意义 2. 有限元中的模态分析:给结构“体检振动” 2.1 模态分析的意义 2.2 实际案例 2.2.1 桥梁模态分析 2.2.2 飞机机翼模态分析 2.2.3 具体事例 3. 模态分析的工具…...
数科OFD证照生成原理剖析与平替方案实现
一、 引言 近年来,随着电子发票的普及,OFD格式作为我国电子发票的标准格式,其应用范围日益广泛。然而,由于不同软件生成的OFD文件存在差异,以及用户对OFD文件处理需求的多样化,OFD套餐转换工具应运而生。本…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...