当前位置: 首页 > 编程日记 > 正文

C#操作注册表

using Microsoft.Win32 ;


以下从‘读’‘写’‘删除’‘判断’四个事例实现对注册表的简单操作
1.读取指定名称的注册表的值
private string GetRegistData(string name)
{
string registData;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
registData = aimdir.GetValue(name).ToString();
return registData;
}
以上是读取的注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下的XXX目录中名称为name的注册表值;

2.向注册表中写数据
private void WTRegedit(string name,string tovalue)
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.CreateSubKey("XXX");
aimdir.SetValue(name,tovalue);
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下新建XXX目录并在此目录下创建名称为name值为tovalue的注册表项;

3.删除注册表中指定的注册表项
private void DeleteRegist(string name)
{
string[] aimnames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
aimnames = aimdir.GetSubKeyNames();
foreach(string aimKey in aimnames)
{
if(aimKey == name)
aimdir.DeleteSubKeyTree(name);
}
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中删除名称为name注册表项;

4.判断指定注册表项是否存在
private bool IsRegeditExit(string name)
{
bool _exit = false;
string[] subkeyNames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
subkeyNames = aimdir.GetSubKeyNames();
foreach(string keyName in subkeyNames)
{
if(keyName == name)
{
_exit = true;
return _exit;
}
}
return _exit;
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中判断名称为name注册表项是否存在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;

------------------------------------------------------------------------------------------------------------

18.3  使用注册表

.NET Compact Framework中,Microsoft.Win32命名空间只提供处理操作系统注册表的类和对象。表18-3列出了Microsoft.Win32命名空间支持的类和对象。

18-3  Microsoft.Win32命名空间支持的类和对象

类名

说明

Registry

提供表示Windows注册表中的根项的RegistryKey对象,并提供访问项/值对的static方法

RegistryKey

表示Windows注册表中的项级节点。此类是注册表封装

RegistryKeyPermissionCheck

指定在打开注册表项并访问它们的名称/值对时是否执行安全检查

RegistryValueKind

指定在注册表中存储值时所用的数据类型,或标识注册表中某个值的数据类型

Registry类包含在Windows Mobile的注册表中能找到的标准子树集。由Registry类公开的RegistryKey实例,描绘注册表中的子树项和值的基本存储机制。所有的项都是只读的,因为注册表依赖于它们的存在。由Registry类以静态成员的方式公开的子树有:

· CurrentUser  存储有关用户首选项的信息。

· LocalMachine   存储本地计算机的配置信息。

· ClassesRoot  存储有关类型(和类)及其属性的信息。

· Users  存储有关默认用户配置的信息。

一旦标识了希望在其下存储/检索注册表信息的子树后,就可以开始使用RegistryKey类创建或删除子项和给指定项赋值。

18.3.1  创建注册表子项

.NET Compact Framework中,可以调用RegistryKey类的CreateSubKey方法来实现创建注册表子项的功能。调用CreateSubKey方法,创建一个新子项或打开一个现有子项以进行写访问。.NET Compact Framework只提供了CreateSubKey方法的一种重载版本。该方法的声明语法如下:

Public Function CreateSubKey (ByVal subkey As String) As RegistryKey

字符串subkey不区分大小写,指定要创建或打开的子项的名称或路径。CreateSubKey方法返回一个标识新建子项的RegistryKey对象。如果操作失败,则返回空引用(在Visual Basic中为Nothing)。如果为subkey指定了零长度字符串,则返回当前的RegistryKey对象。以下代码演示调用RegistryKey类的CreateSubKey方法。

……

' HKEY_CURRENT_USER 下创建一个名为 RegistryDemo 的子项

Dim RegistryDemo As Microsoft.Win32.RegistryKey = _

    Microsoft.Win32.Registry.CurrentUser.CreateSubKey("RegistryDemo")

 

' HKEY_CURRENT_USER\RegistryDemo 下创建两个子项

RegistryDemo.CreateSubKey("TestName").Close()

Dim TestSettings As Microsoft.Win32.RegistryKey = RegistryDemo.CreateSubKey("TestSettings")

 

' 关闭 RegistryKey 实例

TestSettings.Close()

RegistryDemo.Close()

……

18.3.2  读取注册表子项

读取注册表子项的功能指检索根项或指定子项的子项。RegistryKey类的GetSubKey Names方法能够非常方便地检索根项或指定子项的子项。GetSubKeyNames方法的声明语法如下:

Public Function GetSubKeyNames As String()

GetSubKeyNames方法返回一个包含当前项的子项名称的字符串数组。以下代码演示调用RegistryKey类的GetSubKeyNames方法,检索HKEY_CURRENT_USER的所有子项。

……

Dim subKeyName As String

Dim subkeys As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser

 

' 返回 HKEY_CURRENT_USER 的所有子项

Dim keynames As String() = subkeys.GetSubKeyNames()

 

' 显示子项名称

For Each subKeyName In keynames

    MsgBox(subKeyName)

Next

 

subkeys.Close()

……

18.3.3  创建注册表值项

创建注册表值项的功能是指设置注册表项中的名称/值对的值。通过RegistryKey类的SetValue方法和Registry类的SetValue方法,都可以实现创建注册表值项的功能。但是每次使用Registry类的SetValue方法时,SetValue方法都会尝试打开和关闭注册表项,所以当访问大数据量的值项时,建议使用RegistryKey类的SetValue方法来保证更好的性能。在.NET Compact Framework中,RegistryKey类的SetValue方法提供两个重载版本,其声明语法如下:

Public Shared Sub SetValue ( _

    ByVal keyName As String, _

    ByVal valueName As String, _

    ByVal value As Object, _

)

 

Public Shared Sub SetValue ( _

    ByVal keyName As String, _

    ByVal valueName As String, _

    ByVal value As Object, _

    ByVal valueKind As RegistryValueKind _

)

SetValue方法的通过RegistryValueKind参数指定的注册表枚举数据类型,设置该指定的注册表项的名称/值对。如果指定的值项不存在,则创建该值项。注册表值项,可具有与任何名称都不关联的值。如果注册表编辑器中显示此未命名的值,则会出现字符串“(Default)”,而不会出现值项的名称。若要设置这个未命名的值,则指定valueName为空引用或空字符串即可。如果指定的value类型与指定的valueKind不匹配,并且无法转换数据,则会抛出ArgumentException例外。

以下代码演示调用RegistryKey类的SetValue方法设置TestSettings子项的3个名称/值对:

……

    ' HKEY_CURRENT_USER 下创建一个名为 RegistryDemo 的子项

Dim RegistryDemo As Microsoft.Win32.RegistryKey = _

Microsoft.Win32.Registry.CurrentUser.CreateSubKey("RegistryDemo")

 

' HKEY_CURRENT_USER\RegistryDemo 下创建两个子项

RegistryDemo.CreateSubKey("TestName").Close()

Dim TestSettings As Microsoft.Win32.RegistryKey = RegistryDemo.CreateSubKey("TestSettings")

 

    ' 设置 TestSettings 子项的3个名称/值对

    Dim myStrings() As String = {"One", "Two", "Three"}

TestSettings.SetValue("TestArray", myStrings)

    TestSettings.SetValue("语言", "英语")

TestSettings.SetValue("级别", "CET-6")

TestSettings.SetValue("ID", 1001)

 

' 关闭 RegistryKey 实例

TestSettings.Close()

RegistryDemo.Close()

……

18.3.4  读取注册表值项

读取注册表值项的功能,包括检索与指定子项关联的所有值名称和值项所对应的值两部分功能。通过RegistryKey类的GetValueNames方法,可以实现检索与指定子项关联的所有值名称的功能。通过RegistryKey类的GetValue方法和Registry类的GetValue方法,都可以实现检索子项所对应项值的功能。但是每次使用Registry类的GetValue方法时,GetValue方法都会尝试打开和关闭注册表项,所以当访问大数据量的值项时,建议使用RegistryKey类的GetValue方法。RegistryKey类的GetValueNames方法的声明语法如下:

Public Function GetValueNames As String()

.NET Compact Framework中,RegistryKey类的GetValue方法提供两个重载版本,其声明语法如下:

Public Function GetValue (ByVal name As String) As Object

Public Function GetValue (ByVal name As String, ByVal defaultValue As Object) As Object

GetValueNames方法返回一个包含与此项关联的所有值名称的字符串数组。如果未找到此项的值名称,则返回一个空数组。注册表子项可以有一个默认值,该默认值的名称为空字符串("")的名称/值对。如果为注册表子项设置了默认值,则GetValueNames方法返回的数组包含该空字符串。

GetValue方法返回一个与指定注册表项中的指定名称关联的值。如果在指定的项中未找到该名称,则返回用户提供的默认值;或者如果指定的项不存在,则返回空引用。以下代码演示调用RegistryKey类的GetValueNames方法,检索TestSettings子项的所有值项的名称,并通过GetValue方法显示值项对应的值。

……

Dim valueName As String

Dim subkeys As Microsoft.Win32.RegistryKey = _

    Microsoft.Win32.Registry.CurrentUser.OpenSubKey("RegistryDemo\TestSettings")

 

' 返回 TestSettings 的所有值项

Dim keyvalues As String() = subkeys.GetValueNames()

 

' 显示值项名称和对应的值

For Each valueName In keyvalues

    MsgBox("名称/值对 " & valueName & "=" & subkeys.GetValue(valueName).ToString())

Next

 

subkeys.Close()

……

18.3.5  删除注册表子项

.NET Compact Framework中,提供了两种删除注册表子项的方法。分别是RegistryKey类的DeleteSubKeyTreeDeleteSubKey方法。DeleteSubKeyTree方法递归删除指定子项以及该子项所包括的任何子项。DeleteSubKey方法删除指定的子项。在.NET Compact Framework中,DeleteSubKey方法提供两个重载版本。DeleteSubKeyTreeDeleteSubKey方法的声明语法如下:

Public Sub DeleteSubKeyTree (ByVal subkey As String)

 

Public Sub DeleteSubKey (ByVal subkey As String)

Public Sub DeleteSubKey (ByVal subkey As String, ByVal throwOnMissingSubKey As Boolean)

RegistryKey类的这两个方法的字符串参数subkey均不区分大小写。使用DeleteSubKeyTree方法删除指定子项时,将删除目录树中该项下的所有项,并且不提供任何警告提示。如果仅希望删除不包括其他子项的子项时,可以使用DeleteSubKey方法。DeleteSubKey方法的throwOnMissingSubKey参数,指示在找不到指定子项的情况下是否引发异常。如果该参数为true,并且指定的子项不存在,则引发异常;如果该参数为false,并且指定的子项不存在,则不执行任何操作。以下代码演示调用RegistryKey类的DeleteSubKeyDeleteSubKeyTree方法,分别删除子项TestSettingsRegistryDemo

 

……

' 删除子项 TestSettings RegistryDemo

Microsoft.Win32.Registry.CurrentUser.DeleteSubKey("RegistryDemo\TestName")

Microsoft.Win32.Registry.CurrentUser.DeleteSubKeyTree("RegistryDemo")

……

18.3.6  删除注册表值项

删除注册表值项的功能是指从当前子项中删除指定的值项。通过RegistryKey类的DeleteValue方法,可以实现删除注册表值项的功能。在.NET Compact Framework中,RegistryKey类的DeleteValue方法提供两个重载版本,其声明语法如下:

Public Sub DeleteValue (ByVal name As String)

Public Sub DeleteValue (ByVal name As String, ByVal throwOnMissingValue As Boolean)

DeleteValue方法通过RegistryValueKind参数指定的注册表枚举数据类型,设置该指定的注册表项的名称/值对。DeleteValue方法的throwOnMissingSubKey参数,指示在找不到指定值的情况下是否引发异常。如果该参数为True,并且指定的值项不存在,则引发异常;如果该参数为False,并且指定的值项不存在,则不执行任何操作。以下代码演示调用RegistryKey类的DeleteValue方法删除值项TestArray

……

Dim testSettings As Microsoft.Win32.RegistryKey = _

    Microsoft.Win32.Registry.CurrentUser.OpenSubKey("RegistryDemo\TestSettings")

 

' 删除值项 TestArray

testSettings.DeleteValue("TestArray")

testSettings.Close()

……

18.3.7  注册表数据类型

18-2列出了.NET Compact Framework 2.0支持的7种常用的Windows Mobile注册表数据类型。这7种注册表数据类型的定义,包含在Microsoft.Win32命名空间的枚举对象RegistryValueKind里。

设置注册表项的值时,应该使用SetValue方法显式地指定注册表数据类型。检索和显示注册表项的值时,应该先使用GetValueKind方法检查注册表数据类型。

 

 

 

18-2  Windows Mobile注册表数据类型

数据类型

说明

String

固定长度的文本字符串。此值与 Win32 API 注册表数据类型 REG_SZ 等效

Binary

指定任意格式的二进制数据。此值与 Win32 API 注册表数据类型 REG_BINARY 等效

DWORD

数据由4字节长的数表示。设备驱动程序和服务的很多参数都是这种类型,这些参数在注册表编辑器中是以二进制、十六进制或十进制的格式显示的。此值与 Win32 API 注册表数据类型 REG_DWORD 等效

MultiString

多重字符串。包含列表或多值(其格式可被用户读取)的值通常为该类型。各个值项之间可以使用空格、逗号或其他标记分开。此值与 Win32 API 注册表数据类型 REG_MULTI_SZ 等效

ExpandString

指定一个以 NULL 结尾的字符串,该字符串中包含对环境变量(如 %PATH%,当值被检索时,就会展开)的未展开的引用。此值与 Win32 API 注册表数据类型 REG_EXPAND_SZ 等效

QWord

指定一个 64 位二进制数。此值与 Win32 API 注册表数据类型 REG_QWORD 等效

Unknown

指示一个不受支持的注册表数据类型。例如,不支持 Microsoft Win32 API 注册表数据类型 REG_RESOURCE_LIST。使用此值指定 SetValue 方法,应在存储名称/值对时确定适当的注册表数据类型

清单18-1演示调用RegistryKey类的SetValueGetValueKind方法和枚举对象RegistryValueKind设置及检查显示各种类型的注册表数据。

清单18-1  设置及检查显示各种类型的注册表数据

……

Dim rk As Microsoft.Win32.RegistryKey = _

    Microsoft.Win32.Registry.CurrentUser.CreateSubKey("RegistryDemo\RegistryValueKindExample")

 

' 创建名称/值对

rk.SetValue("QuadWordValue", 42, Microsoft.Win32.RegistryValueKind.QWord)

rk.SetValue("DWordValue", 42, Microsoft.Win32.RegistryValueKind.DWord)

rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"}, _

    Microsoft.Win32.RegistryValueKind.MultiString)

rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255}, _

    Microsoft.Win32.RegistryValueKind.Binary)

rk.SetValue("StringValue", "The path is %PATH%", Microsoft.Win32.RegistryValueKind.String)

rk.SetValue("ExpandedStringValue", "The path is %PATH%", _

    Microsoft.Win32.RegistryValueKind.ExpandString)

 

' 显示名称/值对

Dim valueNames As String() = rk.GetValueNames()

Dim s As String

For Each s In valueNames

    Dim rvk As Microsoft.Win32.RegistryValueKind = rk.GetValueKind(s)

    Select Case rvk

        Case Microsoft.Win32.RegistryValueKind.MultiString

            Dim values As String() = CType(rk.GetValue(s), String())

            MsgBox(s & ":" & rvk & ":" & values(0))

            Dim i As Integer

            For i = 1 To values.Length - 1

    MsgBox(i & ":" & values(i))

            Next

        Case Microsoft.Win32.RegistryValueKind.Binary

            Dim bytes As Byte() = CType(rk.GetValue(s), Byte())

            MsgBox(s & ":" & rvk & ":" & bytes(0))

            Dim i As Integer

            For i = 1 To bytes.Length - 1

    MsgBox(s & ":" & bytes(i))

            Next

        Case Else

            MsgBox(s & ":" & rvk & ":" & rk.GetValue(s))

        End Select

    Next

……

执行清单18-1的代码,向Pocket PC设备注册表写入数据的结果如图18-3所示。

18-3  各种类型的注册表数据

通过本章的介绍,应该对如何使用Windows Mobile注册表有了一定的了解。接下来通过介绍一个Pocket PC设备的注册表应用实例来加深感性认识。

            

                     [Reprinted from http://book.csdn.net/bookfiles/166/1001667314.shtml]

转载于:https://www.cnblogs.com/GT_Andy/archive/2009/05/16/1922082.html

相关文章:

Red Hat Linux 安装教程

一、下载链接 链接:https://pan.baidu.com/s/1JShQmOrgGG5_uaqPUuaHLg 提取码:ture 二、安装步骤 1、打开虚拟机,单击“创建新的虚拟机”; 2、在出现的“新建虚拟机向导”窗口中,选择默认的“典型(推荐&…

Spring中利用applicationContext.xml文件实例化对象和调用方法

Spring中实例化对象和调用方法入门 1.jar包和xml的准备 已上传至百度云盘,链接: https://pan.baidu.com/s/1CY0xQq3GLK06iX7tVLnp3Q  提取码: shjd ; 2.在eclipse中创建javaweb项目 1.第一次创建javaWEB项目操作步骤 1)eclipse中运行javaWE…

图形文件元数据管理工具exiv2

图形文件元数据管理工具exiv2图形文件通常都包含多种元数据,如Exif、IPTC、XMP。这些信息往往是渗透人员收集的目标。为了便于管理这些信息,Kali Linux内置了专用工具exiv2。该工具支持24种文件格式,包括JPEG、TIFF、PNG、GIF、PSD、TGA、BMP…

什么是LAN(局域网)

一、局域网 局域网(Local Area Network),简称LAN,是指在某一区域内由多台计算机互联成的计算机组。“某一区域”指的是同一办公室、同一建筑物、同一公司和同一学校等,一般是方圆几千米以内。局域网可以实现文件管理、…

网络编程-粘包

粘包问题的产生 TCP流式协议 基于数据流的协议 接收方产生粘包问题 1.接收方不清楚数据有多长只接收了数据的一部分 2.接收方多读取了数据 发送方产生的粘包问题 操作系统没有及时发送前一次的数据,导致两次数据粘在一起 粘包问题的根本原因是接收方不清楚数据的长度…

Linq基础知识小记二

书写Linq查询有两种方法,第一种是通过方法语法(也就是扩展方法),第二种是查询表达式语法. 1、方法语法 方法语法就是通过扩展方法和Lambda表达式来创建查询 (1)、链式查询 这种查询方式很多语言都支持,通过一段实例,介绍Linq的链式查询.需求如下:找出字符串数组中含有字母e的字…

Linux查看文件内容的5种方式

目录 1. more指令 —— 分页显示文件内容 2. less指令 —— 可以向前或向后查看文件内容 3. head指令 —— 查看文件开头的内容 4. tail指令 —— 显示文件尾部的内容 5. cat指令 —— 显示文件内容 1. more指令 —— 分页显示文件内容 more指令会以一页一页的形式显示文…

通过病毒名称识病毒

很多时候大家已经用杀毒软件查出了自己的机子中了例如Backdoor. RmtBomb.12 、Trojan.Win32.SendIP.15 等等这些一串英文还带数字的病毒名,这时有些人就懵了,那么长一串的名字,我怎么知道是什么病毒啊? 其实只要我们掌握一些病…

MySQL相关命令

目录 1、MySQL登录命令 2、MySQL查看系统中有哪些数据库 3、查看当前使用的数据库 4、 更换(或者使用)指定的数据库 5、查看当前数据库中已经存在的表格 6、查看表结构 7、查看MySQL版本信息 8、创建数据库 9、删除数据库 10、选择数据库 11、…

[Linux] 010 权限管理命令 chmod

1. 权限管理命令:chmod 命令名称:chmod命令英文原意:change the permissions mode of a file命令所在路径:/bin/chmod执行权限:所有用户语法: chmod [{ugoa} {-} {rwx}] [文件或目录] [mode421] [文件或目录…

bzoj 1787 紧急集合

题目大意: 一棵树上,两个相邻点之间距离为1,每次询问三个点, 求到这三个点距离和最小的点,以及这个距离和 思路: 几乎是lca裸题 lca:倍增即可 然后求出每两个点之间的lca 画画图可知必有两个lca…

一些权限管理方面的文章

http://www.cnblogs.com/yukaizhao/archive/2007/04/15/user_role_action_permission.html 六种不同需求的权限设计数据库关系图(从易到难) 金色海洋的自然框架系列 http://www.cnblogs.com/jyk/archive/2009/06/06/1497616.html 吉日嘎啦的 简单操作权…

editplus 3 注册码

editplus 3 注册码注册信息:kariryo5387D-12450-BCZ8B-D6W0B-85TE1

15.linux-LCD层次分析(详解)

如果我们的系统要用GUI(图形界面接口),这时LCD设备驱动程序就应该编写成frambuffer接口,而不是像之前那样只编写操作底层的LCD控制器接口。 什么是frambuffer设备? frambuffer设备层是对图像设备的一种抽象&#xff0c…

【牛客网】最长对称子串

给定一个字符串&#xff08;数字或大小写字母&#xff09;, 找出最长的对称的子串&#xff08;如有多个&#xff0c;输出任意一个&#xff09;。例如&#xff1a;输入&#xff1a;“abbaad”输出&#xff1a;“abba”#include <iostream> #include <cstring> #incl…

利用JS中window.showModalDialog()详解

window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。 window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。 使用方法&#xff1a; vReturnValue window.showModalDialog(sURL [, vArguments] [,sFeatures]) vReturnValue window.show…

数据库及页面乱码问题

目录 MySQL乱码问题 1、页面编码和文件编码 2、控制器/过滤器&#xff08;filter&#xff09; 3、数据库及表格编码 4、字符流编码 5、Tomcat编码 6、外部文件编码 MySQL乱码问题 1、页面编码和文件编码 JSP、HTML页面头部以及文件编码设置字符编码格式为UTF-8。 &…

Cornell University Designing with Microcontrollers

http://instruct1.cit.cornell.edu/courses/ee476/转载于:https://www.cnblogs.com/stoneresearch/archive/2008/10/21/4336378.html

Tomcat下载安装与环境变量的配置

注意&#xff1a;安装Tomcat之前&#xff0c;一定要先安装好JDK并正确配置jdk环境变量&#xff1b; 参考教程&#xff1a;JDK的安装与环境变量的配置 1、Tomcat下载 &#xff08;1&#xff09;百度搜索“Tomcat官网”、“Tomcat下载”等类似关键字&#xff0c;或者进入Tomcat…

[HNOI2015]落忆枫音

题目描述 不妨假设枫叶上有 n个穴位&#xff0c;穴位的编号为 1 ~ n。有若干条有向的脉络连接着这些穴位。穴位和脉络组成一个有向无环图——称之为脉络图&#xff08;例如图 1&#xff09;&#xff0c;穴位的编号使得穴位 1 没有从其他穴位连向它的脉络&#xff0c;即穴位 1 …

xp下安装sqlserver 2000的解决方案

1.在运行对话框输入&#xff1a;regedit&#xff08;注册表&#xff09; 2.把HKEY_LOCAL_MACHINE-----SYSTEM---------ControlSet001-------SessionManger--------PendingFileRenameOperations删除。转载于:https://www.cnblogs.com/deary/archive/2009/06/23/1509427.html

洛谷P2380 狗哥采矿

P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事&#xff0c;出来了这么一道题 题目描述 一个n*m的矩阵中&#xff0c;每个格子内有两种矿yeyenum和bloggium&#xff0c;并且知道它们在每个格子内的数量是多少。最北边有bloggium的收集站&#xff0c;最西边有 yeye…

详解DNS的常用记录(下):DNS系列之三

详解DNS常用记录&#xff08;下&#xff09;在上篇博文中我们介绍了DNS服务器中几种不可或缺的记录&#xff0c;包括A记录&#xff0c;NS记录和SOA记录。本篇博文中我们将继续为大家介绍DNS的另外几种常用记录&#xff0c;希望能对大家了解DNS有所帮助。四MX记录MX记录也被称为…

DP_knapsack

动态规划法解0-1背包问题 问题描述&#xff1a; 有n个背包&#xff0c;重量依次为w1,w2, ... ,wn, 价值依次是v1,v2, ... ,vn, 现在有一个大背包&#xff0c;其容量是capacity&#xff0c;往其中装小背包&#xff0c;要求得到的总价值最大&#xff0c;如何装&#xff1f; 用val…

三种求全排列方式之比较

一共有三种求全排列的方式&#xff1a; 第一种就是只适合用于非可重集的DFS实现 第二种就是可以用于可重集上的刘汝佳书上的代码 第三种就是STL中的next——permutation 在对这三种方式做了比较之后发现&#xff1a; DFS实现的效率最高&#xff0c;当n 10的时候耗时才不到2s&a…

Java连接数据库 JDBC

1、JDBC是什么&#xff1f; JDBC&#xff0c;英文全称&#xff1a;Java DataBase Connectivity&#xff0c;中文全称&#xff1a;java数据库连接&#xff0c;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;由一组用Java语言编写的类…

西门子smart200以太网通讯协议

西门子smart200具体的通讯文档在网上或者官网我都没有找到&#xff08;哪位大仙有请给我留言发个感激不尽&#xff09;&#xff0c;本人是通过监听控制软件分析出其中的通讯协议。 连接是通过TCP/IP协议&#xff0c;我一般喜欢用Java写测试Socket。 通讯是依照字节流沟通&#…

祝我亲爱的天蝎GG生日快乐!+相识3周年小纪念

作者&#xff1a;快乐de蚂蚁2005年10月26日我们相识于清华一教于千万人之中相遇了彼此&#xff0c;你推着车走过来&#xff0c;我站在一教门口午后温暖的阳光斑斑驳驳的洒在你身上&#xff0c;唇红齿白&#xff0c;羞涩的笑容。。。第一次见面的此情此景永远定格在我的脑海。谁…

Aspose.Words导出图片 表格 Interop.Word

先定义一个WORD 模板&#xff0c; 然后替换文本、域 &#xff0c;定位开始表格 文本和段落 // Specify font formattingAspose.Words.Font font builder.Font;font.Size 16;font.Bold true; ;font.Color Color.Black;font.Name "Arial";font.UnderlineUnderline.…

[转帖]tar高级教程:增量备份、定时备份、网络备份

tar高级教程&#xff1a;增量备份、定时备份、网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论一、概述 备份与恢复对于系统维护而言是至关重要的事情。不合理的备份与还原会让你的数据面临丢失的风险。许多用户都在丢失重…