当前位置: 首页 > news >正文

10.2 目录(文件夹)操作

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

10.2.1 DirectoryInfo类

DirectoryInfo类可以获得目录信息。

DirectoryInfo常用属性:

  1. Name:获取DirectoryInfo实例的名称,例如:c:\windows\system32将返回system32。
  2. FullName:获取目录或文件的完整目录。例如:c:\windows\system32将返回c:\windows\system32。
  3. Attributes:目录的属性。
  4. Exists:目录是否存在。
  5. CreationTime:目录的创建时间。
  6. LastWriteTime:目录的最后修改时间。
  7. Parent:目录的父目录。

DirectoryInfo常用方法:

  1. Create:创建目录。
  2. Delete:删除目录,使用此方法带参数的重载可以实现删除目录下的子目录和文件,否则只能删除空目录。
  3. MoveTo:移动目录。注意:此方法只能在同一个磁盘分区下移动。
  4. GetDirectories:返回当前目录的子目录列表,这是一个DirectoryInfo数组。
  1. 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常用方法:

  1. CreateDirectory:创建目录。
  2. Delete:删除目录。
  3. Move:移动目录。
  4. GetLogicalDrives:检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称,这是一个字符串数组。
  5. GetDirectories:子目录的名称(包括其路径),这是一个字符串数组。
  6. GetFiles:目录中文件的名称(包括其路径),这是一个字符串数组。
  7. GetCreationTime:获得目录创建时间。
  8. GetLastWriteTime:获得目录最后修改时间。
  9. GetLastAccessTime:获得目录最后访问时间。
  10. GetParent:获得父目录,这是一个DirectoryInfo类型。
  11. SetCreationTime:设置目录创建时间。
  12. SetLastWriteTime:设置目录最后修改时间。
  13. SetLastAccessTime:设置目录最后访问时间。
  14. GetCurrentDirecotry:获得程序所在路径。
  15. 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 目录(文件夹)操作

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

LiteFlow Spring boot使用方式

文章目录 概述LiteFlow框架的优势规则调用逻辑规则组件定义组件内数据获取通过 DefaultContext自定义上下文 通过 组件规则定义数据通过预先传入数据 liteflow 使用 概述 在每个公司的系统中&#xff0c;总有一些拥有复杂业务逻辑的系统&#xff0c;这些系统承载着核心业务逻…...

OSCP:Windows 服务提权详解

在Windows操作系统中&#xff0c;服务是一种特殊的后台进程&#xff0c;它们通常以较高的权限&#xff08;如 SYSTEM 或 Administrator&#xff09;运行。攻击者可以通过控制服务的创建、配置或运行过程实现权限提升&#xff08;提权&#xff09;。本文将详细分析Windows服务提…...

星火大模型接入及文本生成HTTP流式、非流式接口(JAVA)

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

21.Word:小赵-毕业论文排版❗【39】

目录 题目​ NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 题目 NO1.2 自己的论文当中接收老师的修改&#xff1a;审阅→比较→源文档&#xff1a;考生文件夹&#xff1a;Word.docx→修订的文档&#xff1a;考生文件夹&#xff1a;教师修改→确定→接收→接收所有修订将合并之…...

Python中的函数(上)

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

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 权限、压缩、进程与服务

概述 放假回家&#xff0c;对Linux系统的一些知识进行重新的整理&#xff0c;做到温故而知新&#xff0c;对用户权限管理、文件赋权、压缩文件、进程与服务的知识进行了一次梳理和总结。 权限管理 Linux最基础的权限是用户和文件&#xff0c;先了解基础的用户权限和文件权限…...

006 LocalStorage和SessionStorage

JWT存储在LocalStorage与SessionStorage里的区别和共同点如下&#xff1a; 区别 数据有效期&#xff1a; • LocalStorage&#xff1a;始终有效&#xff0c;存储的数据会一直保留在浏览器中&#xff0c;即使窗口或浏览器关闭也一直保存&#xff0c;因此常用作持久数据。 • Se…...

AJAX RSS Reader:技术解析与应用场景

AJAX RSS Reader:技术解析与应用场景 引言 随着互联网的快速发展,信息量呈爆炸式增长。为了方便用户快速获取感兴趣的信息,RSS(Really Simple Syndication)技术应运而生。AJAX RSS Reader作为一种基于AJAX技术的信息读取工具,在用户体验和信息获取方面具有显著优势。本…...

Go优雅实现redis分布式锁

前言 系统为了保证高可用&#xff0c;通常会部署多实例&#xff0c;并且会存在同时对共享资源并发读写&#xff0c;这时候为了保证读写的安全&#xff0c;常规手段是会引入分布式锁&#xff0c;本文将介绍如何使用redis设计一个优雅的Go分布式锁。 设计 redis分布式锁是借助…...

本地部署deepseek模型步骤

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

(2025 年最新)MacOS Redis Desktop Manager中文版下载,附详细图文

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

C++ 写一个简单的加减法计算器

************* C topic&#xff1a;结构 ************* 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以太网物理拓扑以太网帧结构以太网提供的服务以太网标准 链路层交换机交换机转发和过滤自学习交换机优点交换机和路由器比较 大家好呀&#xff01;我是小笙&#xff0c;本章我主要分享计算机网络基础 - 链路…...

ray.rllib 入门实践-5: 训练算法

前面的博客介绍了ray.rllib中算法的配置和构建&#xff0c;也包含了算法训练的代码。 但是rllib中实现算法训练的方式不止一种&#xff0c;本博客对此进行介绍。很多教程使用 PPOTrainer 进行训练&#xff0c;但是 PPOTrainer 在最近的 ray 版本中已经取消了。 环境配置&#x…...

FPGA 使用 CLOCK_LOW_FANOUT 约束

使用 CLOCK_LOW_FANOUT 约束 您可以使用 CLOCK_LOW_FANOUT 约束在单个时钟区域中包含时钟缓存负载。在由全局时钟缓存直接驱动的时钟网段 上对 CLOCK_LOW_FANOUT 进行设置&#xff0c;而且全局时钟缓存扇出必须低于 2000 个负载。 注释&#xff1a; 当与其他时钟约束配合…...

选择的阶段性质疑

条条大路通罗马&#xff0c;每个人选择的道路&#xff0c;方向并不一样&#xff0c;但不妨碍都可以到达终点&#xff0c;而往往大家会更推崇自己走过的路径。 自己靠什么走向成功&#xff0c;自己用了什么方法&#xff0c;奉行什么原则或者理念&#xff0c;也会尽可能传播这种&…...

固有频率与模态分析

目录 引言 1. 固有频率&#xff1a;物体的“天生节奏” 1.1 定义 1.2 关键特点 1.3 实际意义 2. 有限元中的模态分析&#xff1a;给结构“体检振动” 2.1 模态分析的意义 2.2 实际案例 2.2.1 桥梁模态分析 2.2.2 飞机机翼模态分析 2.2.3 具体事例 3. 模态分析的工具…...

数科OFD证照生成原理剖析与平替方案实现

一、 引言 近年来&#xff0c;随着电子发票的普及&#xff0c;OFD格式作为我国电子发票的标准格式&#xff0c;其应用范围日益广泛。然而&#xff0c;由于不同软件生成的OFD文件存在差异&#xff0c;以及用户对OFD文件处理需求的多样化&#xff0c;OFD套餐转换工具应运而生。本…...

CAN总线数据采集与分析

CAN总线数据采集与分析 目录 CAN总线数据采集与分析1. 引言2. 数据采集2.1 数据采集简介2.2 数据采集实现3. 数据分析3.1 数据分析简介3.2 数据分析实现4. 数据可视化4.1 数据可视化简介4.2 数据可视化实现5. 案例说明5.1 案例1:数据采集实现5.2 案例2:数据分析实现5.3 案例3…...

SpringSecurity:There is no PasswordEncoder mapped for the id “null“

文章目录 一、情景说明二、分析三、解决 一、情景说明 在整合SpringSecurity功能的时候 我先是去实现认证功能 也就是&#xff0c;去数据库比对用户名和密码 相关的类&#xff1a; UserDetailsServiceImpl implements UserDetailsService 用于SpringSecurity查询数据库 Logi…...

ResNet 残差网络

目录 网络结构 残差块&#xff08;Residual Block&#xff09; ResNet网络结构示意图 残差块&#xff08;Residual Block&#xff09;细节 基本残差块&#xff08;ResNet-18/34&#xff09; Bottleneck残差块&#xff08;ResNet-50/101/152&#xff09; 残差连接类型对比 变体网…...

CAPL编程常见问题与解决方案深度解析

CAPL编程常见问题与解决方案深度解析 目录 CAPL编程常见问题与解决方案深度解析引言1. CAPL编程核心难点剖析1.1 典型问题分类2. 六大典型问题场景解析案例1:定时器资源竞争导致逻辑错乱2.1.1 问题现象2.1.2 根因分析2.1.3 解决方案案例2:大数据量报文处理引发性能瓶颈2.2.1 …...

信号处理以及队列

下面是一个使用C和POSIX信号处理以及队列的简单示例。这个示例展示了如何使用信号处理程序将信号放入队列中&#xff0c;并在主循环中处理这些信号。 #include <iostream> #include <csignal> #include <queue> #include <mutex> #include <thread…...

Linux pkill 命令使用详解

简介 pkill 命令用于根据进程名称、用户、组或其他属性终止进程。它是 procps-ng 包的一部分&#xff0c;通常比 kill 更受欢迎&#xff0c;因为它无需查找进程 ID (PID)。 常用选项 -<signal>, --signal <signal>&#xff1a;定义要发送给每个匹配进程的信号&am…...

react注意事项

1.状态的定义以及修改 2.排序用lodash进行排序 import _ from lodassh 3.利用className插件进行动态类名的使用 4.表单使用 5.react中获取dom...

【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)

本文项目编号 T 158 &#xff0c;文末自助获取源码 \color{red}{T158&#xff0c;文末自助获取源码} T158&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

怎样在PPT中启用演讲者视图功能?

怎样在PPT中启用演讲者视图功能&#xff1f; 如果你曾经参加过重要的会议或者演讲&#xff0c;你就会知道&#xff0c;演讲者视图&#xff08;Presenter View&#xff09;对PPT展示至关重要。它不仅能帮助演讲者更好地掌控演讲节奏&#xff0c;还能提供额外的提示和支持&#…...

UE AController

定义和功能 AController是一种特定于游戏的控制器&#xff0c;在UE框架中用于定义玩家和AI的控制逻辑。AController负责处理玩家输入&#xff0c;并根据这些输入驱动游戏中的角色或其他实体的行为。设计理念 AController设计用于分离控制逻辑与游戏角色&#xff0c;增强游戏设计…...