C#反射技术在多语言实现中的实际用处参考,让初学者学技术有个针对性【附源码】...

   做软件,有点儿类似铁人三项比赛?赛跑、射击、游泳?  光某个环节突出,也没多大用,需要整体能力都强,能把整体都可以搞定,才容易得到比赛的胜利,光某一环节非常优秀,也赢得不来整个比赛。

 

   这些年也还了不少公司,台资公司去过、中日合资的公司去过、国企也去过、民企也去过,想想人生也蛮有意思的。每个企业有每个企业的优点缺点,至少这些经历会让我重视程序的多语言实现功能。

   同样的一个程序卖给国人,可能只能收500元,而且这500也难收到。当时同样的程序卖给老美了,可能是500美金,那完全是不一样的状况了,所以多语言化的程序还是很有必要的。

 

   有些涉及到动态的东西,是不得不用反射技术是实现的,下面的程序就涉及到几个问题:

   1:语言包是不固定的,可能是任意多个。

   2:每个语言包里的内容是什么,事先是不知道的。

   3:静态变量有一大堆,而且将来会更多。

   4:若用比较笨的方法一个个变量赋值,可能要写死,别人看了代码也会笑死。

 

这里主要是用了一个反射的方法,进行了循环遍历变量,然后进行了动态赋值。

using System;
using System.Collections;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;

// 这里需要注意
using System.Reflection;

using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


        
#region public static int GetLanguageResource(object targetObject) 从当前指定的语言包读取信息
        
/// <summary>
        
/// 从当前指定的语言包读取信息
        
/// </summary>
        
/// <returns>设置多语言的属性个数</returns>
        public static int GetLanguageResource(object targetObject)
        {
            
int returnValue = 0;
            
string name = string.Empty;
            Type type 
= targetObject.GetType();
            
// Type type = typeof(TargetObject);
            FieldInfo[] fieldInfo = type.GetFields(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance);
            FieldInfo currentFieldInfo;
            
string messages = string.Empty;
            
for (int i = 0; i < fieldInfo.Length; i++)
            {
                name 
= fieldInfo[i].Name;
                currentFieldInfo 
= fieldInfo[i];
                messages 
= ResourceManagerWrapper.Instance.Get(name);
                
if (messages.Length > 0)
                {
                    currentFieldInfo.SetValue(targetObject, messages);
                    returnValue
++;
                }
            }
            
return returnValue;
        }
        
#endregion

 

 

调用的方法如下:

        #region public static int GetLanguageResource() 从当前指定的语言包读取信息
        
/// <summary>
        
/// 从当前指定的语言包读取信息,用了反射循环遍历
        
/// </summary>
        
/// <returns></returns>
        public static int GetLanguageResource()
        {
            AppMessage appMessage 
= new AppMessage();
            
return BaseBusinessLogic.GetLanguageResource(appMessage);
        }
        
#endregion

 

 

AppMessage 的参考代码如下:

//------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd. 
//------------------------------------------------------------

using System;
using System.Globalization;

namespace DotNet.Utilities
{
    
/// <summary>
    
///    BUBaseAppMessage
    
/// 通用消息控制基类
    
/// 
    
/// 修改纪录
    
///        2007.05.17 版本:1.0    JiRiGaLa 建立,为了提高效率分开建立了类。
    
///    
    
/// 版本:3.1
    
///
    
/// <author>
    
///        <name>JiRiGaLa</name>
    
///        <date>2007.05.17</date>
    
/// </author> 
    
/// </summary>
    public class AppMessage
    {
        
/// <summary>
        
/// 提示信息.
        
/// </summary>
        public static string MSG0000 = "提示信息";

        
/// <summary>
        
/// 发生未知错误.
        
/// </summary>
        public static string MSG0001 = "发生未知错误。";

        
/// <summary>
        
/// 数据库联接不正常.
        
/// </summary>
        public static string MSG0002 = "数据库联接不正常。";

        
/// <summary>
        
/// WebService联接不正常.
        
/// </summary>
        public static string MSG0003 = "WebService 联接不正常。";

        
/// <summary>
        
/// 任何数据未被修改.
        
/// </summary>
        public static string MSG0004 = "任何数据未被修改。";

        
/// <summary>
        
/// 记录未找到,可能已被其他人删除.
        
/// </summary>
        public static string MSG0005 = "记录未找到,可能已被其他人删除。";

        
/// <summary>
        
/// 数据已被其他人修改,请按F5键,重新刷新获得数据.
        
/// </summary>
        public static string MSG0006 = "数据已被其他人修改,请按F5键重新刷新获得数据。";

        
/// <summary>
        
/// '{O}'不允许为空,请输入.
        
/// </summary>
        public static string MSG0007 = "请输入{0} 不允许为空,请输入。";

        
/// <summary>
        
/// {0} 已存在,不可以重复.
        
/// </summary>
        public static string MSG0008 = "{0} 已存在,不可以重复。";

        
/// <summary>
        
/// 新增成功.
        
/// </summary>
        public static string MSG0009 = "新增成功。";

        
/// <summary>
        
/// 更新成功.
        
/// </summary>
        public static string MSG0010 = "更新成功。";

        
/// <summary>
        
/// 保存成功.
        
/// </summary>
        public static string MSG0011 = "保存成功。";

        
/// <summary>
        
/// 批量保存成功.
        
/// </summary>
        public static string MSG0012 = "批量保存成功。";

        
/// <summary>
        
/// 删除成功.
        
/// </summary>
        public static string MSG0013 = "删除成功。";

        
/// <summary>
        
/// 批量删除成功.
        
/// </summary>
        public static string MSG0014 = "批量删除成功。";

        
/// <summary>
        
/// 您确认删除吗?
        
/// </summary>
        public static string MSG0015 = "您确认删除吗?";

        
/// <summary>
        
/// 您确认删除 '{0}'吗?
        
/// </summary>
        public static string MSG0016 = "您确认删除 {0} 吗?";

        
/// <summary>
        
/// 当前记录不允许被删除.
        
/// </summary>
        public static string MSG0017 = "当前记录不允许被删除。";

        
/// <summary>
        
/// 当前记录 '{0}' 不允许被删除.
        
/// </summary>
        public static string MSG0018 = "当前记录 {0} 不允许被删除。";

        
/// <summary>
        
/// 当前记录不允许被编辑,请按F5键,重新获取数据最新数据.
        
/// </summary>
        public static string MSG0019 = "当前记录不允许被编辑,请按F5键,重新获取数据最新数据。";

        
/// <summary>
        
/// 当前记录 '{0}' 不允许被编辑,请按F5键,重新获取数据最新数据.
        
/// </summary>
        public static string MSG0020 = "当前记录 {0} 不允许被编辑,请按F5键,重新获取数据最新数据。";

        
/// <summary>
        
/// 当前记录已是第一条记录.
        
/// </summary>
        public static string MSG0021 = "当前记录已是第一条记录。";

        
/// <summary>
        
/// 当前记录已是最后一条记录.
        
/// </summary>
        public static string MSG0022 = "当前记录已是最后一条记录。";

        
/// <summary>
        
/// 请至少选择一项.
        
/// </summary>
        public static string MSG0023 = "请选择一条记录。";

        
/// <summary>
        
/// 请至少选择一项 '{0}'.
        
/// </summary>
        public static string MSG0024 = "请至少选择一项 '{0}'。";

        
/// <summary>
        
/// '{0}'不能大于'{1}'.
        
/// </summary>
        public static string MSG0025 = "{0} 不能大于{1}。";

        
/// <summary>
        
/// '{0}'不能小于'{1}'.
        
/// </summary>
        public static string MSG0026 = "{0} 不能小于 {1}。";

        
/// <summary>
        
/// '{0}'不能等于'{1}'.
        
/// </summary>
        public static string MSG0027 = "{0} 不能等于 {1}。";

        
/// <summary>
        
/// 输入的'{0}'不是有效的日期.
        
/// </summary>
        public static string MSG0028 = "输入的 {0} 不是有效的日期。";

        
/// <summary>
        
/// 输入的'{0}'不是有效的字符.
        
/// </summary>
        public static string MSG0029 = "输入的 {0} 不是有效的字符。";

        
/// <summary>
        
/// 输入的'{0}'不是有效的数字.
        
/// </summary>
        public static string MSG0030 = "输入的 {0} 不是有效的数字。";

        
/// <summary>
        
/// 输入的'{0}'不是有效的金额.
        
/// </summary>
        public static string MSG0031 = "输入的 {0} 不是有效的金额。";

        
/// <summary>
        
/// '{0}'名不能包含:\ / : * ? " < > |
        
/// </summary>
        public static string MSG0032 = "{0} 名包含非法字符。";

        
/// <summary>
        
/// 数据已经被引用,有关联数据在
        
/// </summary>
        public static string MSG0033 = "数据已经被引用,有关联数据在。";

        
/// <summary>
        
/// 数据已经被引用,有关联数据在.是否强制删除数据?
        
/// </summary>
        public static string MSG0034 = "数据已经被引用,有关联数据在,是否强制删除数据?";

        
/// <summary>
        
/// {0} 有子节点不允许被删除.
        
/// </summary>
        public static string MSG0035 = "{0} 有子节点不允许被删除,有子节点还未被删除。";

        
/// <summary>
        
/// {0} 不能移动到 {1}.
        
/// </summary>
        public static string MSG0036 = "{0} 不能移动到 {1}。";

        
/// <summary>
        
/// {0} 下的子节点不能移动到 {1}.
        
/// </summary>
        public static string MSG0037 = "{0} 下的子节点不能移动到 {1}。";

        
/// <summary>
        
/// 确认移动 {0} 到 {1} 吗?
        
/// </summary>
        public static string MSG0038 = "确认移动 {0} 到 {1} 吗?";

        
/// <summary>
        
/// '{0}'不等于'{1}'.
        
/// </summary>
        public static string MSG0039 = "{0} 不等于 {1}。";

        
/// <summary>
        
/// {0} 错误.
        
/// </summary>
        public static string MSG0040 = "{0} 错误。";

        
/// <summary>
        
/// 确认审核通过吗?.
        
/// </summary>
        public static string MSG0041 = "确认审核通过吗?";

        
/// <summary>
        
/// 确认驳回吗?.
        
/// </summary>
        public static string MSG0042 = "确认审核驳回吗?";

        
/// <summary>
        
/// 成功锁定数据.
        
/// </summary>
        public static string MSG0043 = "不能锁定数据。";

        
/// <summary>
        
/// 不能锁定数据.
        
/// </summary>
        public static string MSG0044 = "成功锁定数据。";

        
/// <summary>
        
/// 数据被修改提示
        
/// </summary>
        public static string MSG0045 = "数据已经改变,想保存数据吗?";

        
/// <summary>
        
/// 最近 {0} 次内密码不能重复。
        
/// </summary>
        public static string MSG0046 = "最近 {0} 次内密码不能重复。";

        
/// <summary>
        
/// 密码已过期,账户被锁定,请联系系统管理员。
        
/// </summary>
        public static string MSG0047 = "密码已过期,账户被锁定,请联系系统管理员。";

        
/// <summary>
        
/// 数据已经改变,不保存数据?
        
/// </summary>
        public static string MSG0065 = "数据已经改变,不保存数据?";

        
public static string MSG0048 = "拒绝登录,用户已经在线上。";
        
public static string MSG0049 = "拒绝登录,网卡Mac地址不符限制条件。";
        
public static string MSG0050 = "拒绝登录,IP地址不符限制条件";
        
public static string MSG0051 = "已到在线用户最大数量限制。";


        
public static string MSG0060 = "请先创建该职员的登录系统的用户信息。";

        
/// <summary>
        
/// 您确认移除吗?
        
/// </summary>
        public static string MSG0075 = "您确认移除吗?";

        
/// <summary>
        
/// 您确认移除 '{0}'吗?
        
/// </summary>
        public static string MSG0076 = "您确认移除 {0} 吗?";

        
public static string MSG0077 = "成功删除 {0} 条记录。";

        
public static string MSG0700 = "已经成功连接到目标数据。";

        
public static string MSG9800 = "";
        
public static string MSG9900 = "公司";
        
public static string MSG9901 = "部门";

        
public static string MSG9910 = "用户未设置电子邮件地址。"// UserNotEmail
        public static string MSG9911 = "用户被锁定。"// UserLocked
        public static string MSG9912 = "用户还未激活账户。"// UserNotActive
        public static string MSG9913 = "用户账户已被激活。"// UserIsActivate
        
        
public static string MSG9956 = "未找到满足条件的记录。";
        
public static string MSG9957 = "用户名";
        
public static string MSG9958 = "数据验证错误。";
        
public static string MSG9959 = "新密码";
        
public static string MSG9960 = "确认密码";
        
public static string MSG9961 = "原密码";
        
public static string MSG9962 = "修改 {0} 成功。";
        
public static string MSG9963 = "设置 {0} 成功。";
        
public static string MSG9964 = "密码";
        
public static string MSG9965 = "登录成功。";
        
public static string MSG9966 = "用户没有找到,请注意大小写。";
        
public static string MSG9967 = "密码错误,请注意大小写。";
        
public static string MSG9968 = "登录被拒绝,请与管理员联系。";
        
public static string MSG9969 = "基础编码";
        
public static string MSG9970 = "职员";
        
public static string MSG9971 = "组织机构";
        
public static string MSG9972 = "角色";
        
public static string MSG9973 = "模块";
        
public static string MSG9974 = "文件夹";
        
public static string MSG9975 = "权限";
        
public static string MSG9976 = "主键";
        
public static string MSG9977 = "编号";
        
public static string MSG9978 = "名称";
        
public static string MSG9979 = "父节点主键";
        
public static string MSG9980 = "父节点名称";
        
public static string MSG9981 = "功能分类主键";
        
public static string MSG9982 = "唯一识别主键";
        
public static string MSG9983 = "主题";
        
public static string MSG9984 = "内容";
        
public static string MSG9985 = "状态码";
        
public static string MSG9986 = "次数";
        
public static string MSG9987 = "有效";
        
public static string MSG9988 = "备注";
        
public static string MSG9989 = "排序码";
        
public static string MSG9990 = "创建者主键";
        
public static string MSG9991 = "创建时间";
        
public static string MSG9992 = "最后修改者主键";
        
public static string MSG9993 = "最后修改时间";
        
public static string MSG9994 = "排序";
        
public static string MSG9995 = "主键";
        
public static string MSG9996 = "索引";
        
public static string MSG9997 = "字段";
        
public static string MSG9998 = "";
        
public static string MSG9999 = "数据库";

        
//韩峰修改20101106
        public static string MSG0201 = "温馨提示:您选择的文件不存在,请重新选择。";
        
public static string MSG0202 = "提示信息";
        
public static string MSG0203 = "您确认移动 \" {0} \" 到 \" {1} \" 吗?" ;
        
public static string MSG0204 = "您确认退出应用程序吗?";
        
public static string MSG0205 = "文件 {0} 已存在,要覆盖服务器上的文件吗?";
        
public static string MSG0206 = "已经超过了上传限制,请检查要上传的文件大小。";
        
public static string MSG0207 = "您确认要删除图片吗?";
        
public static string MSG0208 = "开始时间不能大于结束时间。";
        
public static string MSG0209 = "清除成功。";
        
public static string MSG0210 = "重置成功。";
        
public static string MSG0211 = "已输入{0}次错误密码,不再允许继续登录,请重新启动程序进行登录。";
        
public static string MSG0212 = "查询内容";
        
public static string MSG0213 = "编号总长度不要超过40位。";
        
public static string MSG0214 = "编号生成成功。";
        
public static string MSG0215 = "增序列";
        
public static string MSG0216 = "减序列";
        
public static string MSG0217 = "步调";
        
public static string MSG0218 = "序列重置成功。";
        
public static string MSG0219 = "您确认重置序列吗?";
        
public static string MSG0223 = "用户名 不允许为空,请输入。";
        
public static string MSG0225 = "目前节点上有数据。";
        
public static string MSG0226 = "无法删除自己";
        
public static string MSG0228 = "设置关联用户(账户)成功。";
        
public static string MSG0229 = "所在单位 不允许为空,请选择。";
        
public static string MSG0230 = "申请账户更新成功,请等待审核。";
        
public static string MSG0231 = "密码 不等于 确认密码,请确认后重新输入。";
        
public static string MSG0232 = "用户名";
        
public static string MSG0233 = "姓名";
        
public static string MSG0234 = "E_mail 格式不正确,请重新输入。";
        
public static string MSG0235 = "申请账户成功,请等待审核。";
        
public static string MSG0236 = "导出的目标文件已存在要覆盖 \"{0}\" 吗?";
        
public static string MSG0237 = "成功发送电子邮件。";
        
public static string MSG0238 = "清除异常信息成功。";
        
public static string MSG0239 = "您确认清除异常信息吗?";
        
public static string MSG0240 = "内容不能为空";
        
public static string MSG0241 = "发送邮件失败.";
        
public static string MSG0242 = "移动成功。";

        
public static string MSG0245 = "用户、角色必须选择一个。";

        
public static string MSG0247 = "审批通过 {0}项。";
        
public static string MSG0248 = "审批通过失败。";
        
public static string MSG0249 = "请选需要处理的数据。";
        
public static string MSG0250 = "您确认审批通过此单据吗?";
        
public static string MSG0251 = "成功驳回单据。";
        
public static string MSG0252 = "请选需要处理的数据。";
        
public static string MSG0253 = "您确认不输入驳回理由吗?";
        
public static string MSG0255 = "您确认驳回此单据吗?";
        
public static string MSG0256 = "工作流程发送成功。";
        
public static string MSG0257 = "工作流程发送失败。";
        
public static string MSG0258 = "审批通过单据。";
        
public static string MSG0259 = "请选需要处理的数据。";
        
public static string MSG0260 = "请选择递交给哪位用户。";
        
public static string MSG0261 = "最终审批通过 {0}项。";
        
public static string MSG0262 = "最终审批失败。";
        
public static string MSG0263 = "请选需要处理的数据。";
        
public static string MSG0264 = "成功驳回单据。";
        
public static string MSG0265 = "请选需要处理的数据。";
        
public static string MSG0266 = "您确认不输入驳回理由吗?";
        
public static string MSG0267 = "您确认驳回此单据吗?";
        
public static string MSG0268 = "审批流程发送成功。";
        
public static string MSG0269 = "请选需要处理的数据。";
        
public static string MSG0270 = "请选择递交给哪位用户。";
        
public static string MSG0271 = "您确认递交给 {0}吗?";
        
public static string MSG0272 = "审批流程撤消成功{0}项。";
        
public static string MSG0273 = "审批流程撤消失败。";
        
public static string MSG0274 = "请选需要处理的数据。";
        
public static string MSG0275 = "您确认不输入驳回理由吗?";
        
public static string MSG0276 = "您确认撤销撤消审批流程中的单据吗?";
        
public static string MSG0277 = "请选择递交给哪个用户审批。";
        
public static string MSG0278= "您确认递交给用户 {0}审批吗?";
        
public static string MSG0279 = "工作流程发送成功。";
        
public static string MSG0280 = "工作流程发送失败。";
        
public static string MSG0281 = "您确认替换文件 {0} 吗?";
        
public static string MSG0282 = "上级机构";
        
public static string MSG0283 = "编号生成成功";
        
public static string MSG0284 = "已修改配置信息,需要保存吗?";


        
//重新登录时 登录窗体名称改变为“重新登录”
        public static string MSGReLogOn = "重新登录";

        
#region public static int GetLanguageResource() 从当前指定的语言包读取信息
        
/// <summary>
        
/// 从当前指定的语言包读取信息,用了反射循环遍历
        
/// </summary>
        
/// <returns></returns>
        public static int GetLanguageResource()
        {
            AppMessage appMessage 
= new AppMessage();
            
return BaseBusinessLogic.GetLanguageResource(appMessage);
        }
        
#endregion

        
#region public static string Format(string value, params string[] messages) 格式化一个资源字符串
        
/// <summary>
        
/// 格式化一个资源字符串
        
/// </summary>
        
/// <param name="value">目标字符串</param>
        
/// <param name="messages">传入的信息</param>
        
/// <returns>字符串</returns>
        public static string Format(string value, params string[] messages)
        {
            
return String.Format(CultureInfo.CurrentCulture, value, messages);
        }
        
#endregion

        
#region public static string GetMessage(string id) 读取一个资源定义
        
/// <summary>
        
/// 读取一个资源定义
        
/// </summary>
        
/// <param name="id">资源主键</param>
        
/// <returns>字符串</returns>
        public static string GetMessage(string id)
        {
            
string returnValue = string.Empty;
            returnValue 
= ResourceManagerWrapper.Instance.Get(id);
            
return returnValue;
        }
        
#endregion

        
#region public static string GetMessage(string id, params string[] messages)
        
/// <summary>
        
/// 读取一个资源定义
        
/// </summary>
        
/// <param name="id">资源主键</param>
        
/// <param name="messages">传入的信息</param>
        
/// <returns>字符串</returns>
        public static string GetMessage(string id, params string[] messages)
        {
            
string returnValue = string.Empty;
            returnValue 
= ResourceManagerWrapper.Instance.Get(id);
            returnValue 
= String.Format(CultureInfo.CurrentCulture, returnValue, messages);
            
return returnValue;
        }
        
#endregion
    }
}

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为网卡支持linux,在openwrt下对华为WA633无线AP的千兆网卡驱动进行支持

1.下面是这款AP的全裸图&#xff0c;AP的无线网卡采用了AR9223&#xff0c;PHY采用了博通的BCM5461&#xff0c;主控CPU位octeon 500&#xff0c;射频功放采用的是RF5602方案。由于这款CPU并不常见&#xff0c;我至今未在网上找到它的datasheet&#xff0c;导致我们在玩这款AP的…

linux 正则表达式 视频教程,30分钟带你玩转正则表达式

定义&#xff1a;正则表达式说白了就是有普通字符、以及特殊字符组成的文子模式。{匹配模式标准}正则表达式将会作为一个模板与所搜索的字符串进行匹配。可以让使用者轻易达到搜寻/删除/取代某些特定字符的处理程序。此外vim、grep、find、awk、sed等命令都支持正则表达式注&am…

电脑SSH登陆树莓派Raspberry的两种方式

采用SSH登陆Raspberry需要提前知道Raspberry的IP&#xff0c;SSH登陆端口为22&#xff0c;这里分享两种基于SSH网络登陆树莓派的方式。 一、利用路由器搭建局域网登陆树莓派 1、用路由器搭建局域网&#xff0c;电脑无线或有线方式连接路由器&#xff0c;树莓派用网线连接路由…

Linux sed工具用法

一、sed用法 语法&#xff1a; sed [-nefr] [动作] 作用&#xff1a; 以行为单位的新增/删除/修改/插入/替换等功能&#xff0c;bash脚本中常用。sed功能强大&#xff0c;主要体现在[动作]的指定 选项与参数&#xff1a; -n &#xff1a;只有经过 sed 特殊处理的那一行&…

SourceInsight配置

如图&#xff1a; 1&#xff09; SourceInsight: a) 搜索结果直接替换 b) 配置背景色 c) 显示行号、设置tab键宽度为4个空格以及其他 d) 字体设置 e) 不创建备份文件

linux防火墙查看被动模式,Centos7搭建vsftpd及被动模式下的防火墙设置

一、安装vsftpd&#xff1a;yum -y install vsftpd二、 创建用户名useradd zhangsanpasswd 123456useradd lisipasswd 123456在配置文件下设置拒绝匿名访问重启下服务systemctl restart vsftpd.service将lisi添加进黑名单vim /etc/vsftpd/ftpusers黑名单是路径位于/etc/vsftpd/…

前端小知识点(1):undefined和null区别

目录 一、奇怪点 二、历史原因 三、具体区别 四、代码演示 五、运行结果 一、奇怪点 有点奇怪的是&#xff0c;JavaScript语言居然有两个表示"无"的值&#xff1a;undefined和null。这是为什么&#xff1f; 二、历史原因 1995年JavaScript诞生时&#xff0c;…

六款主流数据恢复软件(绿色版)下载

From: http://hi.baidu.com/zhaodx/item/406401abe55cfa9e14107377 由于我们误操作或病毒侵害等意外情况发生&#xff0c;难免会删除硬盘上的有用数据或文件&#xff0c;此时请记住&#xff1a;千万不要再往这个硬盘里复制文件或写入新的数据了&#xff0c;哪怕已经清空了回收站…

树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】

一、串口说明 莓派3B上UART串口位于GPIO的8脚和10脚&#xff0c;分别为GPIO8Tx&#xff0c;GPIO10Rx。在连接外部接口时&#xff0c;需要交换接口&#xff0c;即GPIO8连接到外设的Rx&#xff0c;GPIO10连接到外设的Tx。Rpi3的接口如下&#xff1a; Rpi3B的GPIO8和GPIO10该串口…

linux mint视频,Linux Mint 20.1 beta 发布,新增免费视频播放器

经过六个月的开发&#xff0c;Linux Mint 20.1“ Ulyssa”的 Beta 版于近日发布了。Mint 20.1 是一个长期支持(LTS)版本&#xff0c;基于 Ubuntu 20.04 LTS &#xff0c;将持续维护到 2025 年。该 Beta 版本基本上实装了此前预告的一些新功能&#xff0c;并提供了 Cinnamon、MA…

linux python pymysql,Python之pymysql的使用

在Python3.x中&#xff0c;可以使用pymysql来MySQL数据库的连接&#xff0c;并实现数据库的各种操作&#xff0c;本次博客主要介绍了pymysql的安装和使用方法。PyMySQL的安装一、.windows上的安装方法&#xff1a;在python3.6中&#xff0c;自带pip3&#xff0c;所以在python3中…

树莓派静态IP配置方法

一、网络接口文件 配置静态IP有个好处在于每次的访问IP是固定的&#xff0c;比如用到的samba服务器共享文件时可以不改动网络地址。树莓派网络接口在/etc/network/interfaces 文件中进行配置&#xff0c;打开该文件&#xff1a;sudo vi /etc/network/interfaces 可以看到第四行…

前端小知识点(2):普通字符串和new String有什么区别

目录 一、其实不仅字符串 二、那么到底为什么&#xff1f; 三、代码案例 四、运行结果 一、其实不仅字符串 var str abc; typeof str > string //他不是对象&#xff0c;可以有方法或者属性 var num 123; //他不是对象&#xff0c;可以有方法或者属性 typeof num …

Linux 管理登陆的用户/查看/剔除

Linux是多用户操作系统&#xff0c;支持多用户同时在线&#xff0c;支持对登陆用户的管理&#xff1a;查看与剔除等。 一、查看在线用户命令 命令&#xff1a; w 二、查看登录记录命令 命令 last 三、剔除在线用户命令 命令&#xff1a;sudo pkill -kill -t usr 四、pkill…

Windows下 maven3.0.4的安装步骤+maven配置本地仓库

简单讲下maven的安装步骤&#xff1a; 1.在安装maven之前&#xff0c;先确保已经安装JDK1.6及以上版本&#xff0c;并且配置好环境变量。 2.下载maven3&#xff0c;最新版本是Maven3.0.4 &#xff0c;下载地址&#xff1a;http://maven.apache.org/download.html 下载apache…

前端小知识点(3):JavaScript 单线程

目录 一、为什么 JavaScript 是单线程&#xff1f; 二、JavaScript是单线程&#xff0c;怎样执行异步的代码&#xff1f; 三、事件循环机制 四、代码1 五、结果1 六、代码2 七、结果2 一、为什么 JavaScript 是单线程&#xff1f; JavaScript 语言的一大特点就是单线程…

Linux安装samba的过程,Samba安装全过程

对于linux与windows共享&#xff0c;和平共处&#xff0c;我们可以用Samba软件Samba是一套免费的开源软件&#xff0c;可以在linux或其他类unix操作系统上实现windows域控制器&#xff0c;文件服务&#xff0c;打印服务等。Samba实现了windows系统所使用的核心网络协议&#xf…

树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】

一、前言 上一篇博文记录了使用wiringPi提供的串口驱动wiringSerial.c wiringSerial.h&#xff0c;并基于该驱动对串口进行简单的通信&#xff0c;测试中发现该串口的驱动比较简单&#xff0c;接收数据会存在分包的现象&#xff0c;另外一点是串口配置只提供了波特率参数配置&…

【转】全面理解javascript的arguments,callee,caller,call,apply概念(修改版)

(注&#xff1a;在看到大家如此关注JS里头的这几个对象&#xff0c;我试着把原文再修改一下&#xff0c;力求能再详细的阐明个中意义 2007-05-21&#xff09;在提到上述的概念之前&#xff0c;首先想说说javascript中函数的隐含参数&#xff1a;arguments Arguments 该对象代表…

windows延缓写入失败相关问题解决办法

From: http://www.ggsafe.com/news/1324547234222.shtml 我们在使用电脑时&#xff0c;有时在不正常关机后电脑会出现这样那样的问题。windows延缓写入失败就是其中一个&#xff0c;很多网友在互联网上发帖求助windows延缓写入失败怎么办&#xff0c;出现这种情况一般都是由于电…