当前位置: 首页 > 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套餐转换工具应运而生。本…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...