WindowsService与FileSystemWatcher文件系统侦听
WindowsService创建
配置
添加服务
工程右键 => 添加 => 新建项
修改服务入口
添加安装程序
配置服务参数
编写
安装安装和卸载主要使用的是.NET提供的 InstallUtil.exe 这个文件 ,文件位于C盘对应的目录下 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 ,拷贝至和exe同一个目录bin下。
拷贝完成后再执行下方操作,需要管理员权限。(注意:安装后不要再用VisualStudio修改服务,若需要修改先卸载服务,否则服务卸载会提示卸载异常,未完全卸载!)
1installutil TestService.exe
启动
1net start TestService
调试
停止
1net stop TestService
卸载
1installutil /u TestService.exe
FileSystemWatcher 类定义
命名空间:
System.IO
程序集:
System.IO.FileSystem.Watcher.dll ...
toString()、String.valueOf()、(String)强转
一. 前言相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,随心所欲,想用哪个用哪个,既然存在,那就应该有它存在的道理,那么什么情况下用哪个呢?
二. 代码实例1. 基本类型
(1)基本类型没有toString()方法
(2)推荐使用
(3)无法强转
(String)是标准的类型转换,将Object类型转为String类型,使用(String)强转时,最好使用instanceof做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCastException异常。需要注意的是编写的时候,编译器并不会提示有语法错误,所以这个方法要谨慎的使用。
instanceof判断
2. 封装类型
(1)toString ok
(2)String.valueOf()
自然也是可以的。
(3)封装类型也无法强转
3. null值问题
(1)toString()报空指针异常
(2)String.valueOf()返回字符串“null”
(3)null值强转成功
三. 源码分析1. toString()
2. String.va ...
趣思考-海量QQ号码去重
文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G.
在原题中,实际有40亿个QQ号码,为了方便起见,在图解和叙述时,仅以4个QQ为例来说明。
方法一:排序很自然地,最简单的方式是对所有的QQ号码进行排序,重复的QQ号码必然相邻,保留第一个,去掉后面重复的就行。
原始的QQ号为:
排序后的QQ号为:
去重就简单了:
可是,去重一定要排序吗?显然,排序的时间复杂度太高了。
方法二:hashmap既然直接排序的时间复杂度太高,那就用hashmap吧,具体思路是把QQ号码记录到hashmap中:
1234mapFlag[123] = truemapFlag[567] = truemapFlag[123] = truemapFlag[890] = true
由于hashmap的去重性质,可知实际自动变成了:
123mapFlag[123] = truemapFlag[567] = truemapFlag[890] = true
很显然,只有123,567,890存在,所以这也就是去重后的结果。
可是,实际要存40亿QQ号码,1G的内存够分配 ...
C#检测文件占用,并重启占用进程
string fileName = @"D:\STNI49C002002.hdf";//要检查被那个进程占用的文件
Process tool = new Process();
tool.StartInfo.FileName = @"D:\Google Downloads\Handle\handle64.exe";
tool.StartInfo.Arguments = fileName + " /accepteula";
tool.StartInfo.UseShellExecute = false;
tool.StartInfo.RedirectStandardOutput = true;
tool.Start();
tool.WaitForExit();
string outputTool = tool.StandardOutput.ReadToEnd();
string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
MatchCollecti ...
C#读写INI文件
C#读写INI文件12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920 ...
Winform多线程操控窗体控件
Winform多线程操控窗体控件12345678910111213141516171819202122//操控本form中的控件方法private void main(){ }//方法委托private delegate void RefreshListDele();//对外接口public void RefreshList(){ if (this.InvokeRequired) //InvokeRequired属性为真时,说明一个创建它以外的线程想访问它 { RefreshListDele rld = new RefreshListDele(mian); this.Invoke(rld);//外线程调用本控件中的委托方法 } else { this.RefreshParameter(); }}
C#读写MySQL工具类
工具类123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103public class MappingDao{ /// <summary> /// 向MySQL表中插入记录 /// </summary> /// <typeparam name="T">表类</typeparam> /// <param name="conn">MySQL连接</param> /// <param name="tableObject">表对象</param> / ...
C#获取程序路径
C#获取程序路径1234567891011121314151617181920212223242526272829303132333435363738394041string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名。string str2=Environment.CurrentDirectory;//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。//备注 按照定义,如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:\”)。如果该进程在子目录中启 动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径(如“C:\mySubDirectory”)。string str3=Directory.GetCurrentDirectory();//获取应用程序的当前工作目录。string str4=AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集。string ...
MapGIS二次开发相关
添加图层12345678910111213141516171819202122232425262728293031323334//判断地图视图中是否有处于显示状态中的地图if (this.mapCtrl.ActiveMap == null){ MessageBox.Show("请先在地图视图中显示一幅地图!!!"); return;}//选择待添加的图层GDBOpenFileDialog ofDlg = new GDBOpenFileDialog();ofDlg.Filter = "简单要素类、注记类|sfcls;acls";if (ofDlg.ShowDialog() != DialogResult.OK) return;string fileName = ofDlg.FileName;SFeatureCls sfcls = new SFeatureCls();sfcls.Open(fileName);this._Tree.WorkSpace.BeginUpdateTree();//附加矢量图层Vector ...
国家标准比例尺分幅图幅编号
我国基本比例尺地形图的分幅编号,有新旧两种。均是在国际规定的1:100万地形图基础上,按经纬度进行分幅和编号的。
1 旧图幅1:100万地图的分幅编号:每幅1:100万地图纬差4°经差6°。从地球赤道起,向两极每纬度4°为一行,依次以字母A,B,C,…,V表示;从西经180°起,向东每6°为一列,依次以数字l,2,3,…,60表示。每幅图的编号由该图幅所在的行号(字符码)和列号(数字码)组成,列号在前,行号在后,二者之间划一短线。如北京在1:100万图上处于第J列第50行,故编号为J-50。
1:50万、1:20万、1:10万地形图分幅编号(旧图幅号没有1:25万):在1:100万图幅基础上,按一定经差和纬差进行划分,并分别在1:100万图幅后加上各自的代号。
1:50万:1:100万地形图一分为四,用A、B、C、D表示,即经差3°,纬差2°
北京某地:北纬39º54’30”, 东经116º28’25”。1:50万图幅编号:J-50-A
1:20万:一幅1:100万地形图分为36幅,用[1]……[36]表示,即经差1°,纬差40′北京某地:北纬39º54’30”, 东经116º28 ...
MapGIS打开场景显示
12345678910111213141516171819202122232425262728293031323334353637383940IApplication app = null;Scene scene = null;SceneControl sceneCtrl = null;Document doc = null;this.app.WorkSpaceEngine.BeginUpdateTree();this.doc = this.app.Document;this.scene = new Scene();//doc.GetScenes().RemoveAll();Server svr = new Server();svr.Connect("MapGISLocalPlus", "", "");RasterDataSet rasSet = new RasterDataSet();bool rst = rasSet.Open(@"gdbp://MapGISLocalPlus/sample/ras/n08e116 ...
ListBox间滚动绑定
ListBox间滚动绑定Code
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899public class Sync{ private ListBox _LB1 = null; private ListBox _LB2 = null; private ListBoxScroll _ListBoxScroll1 = null; private ListBoxScroll _ListBoxScroll2 = null; public Sync(ListBox LB1, ListBox LB2) { if (LB1 != null && LB1.IsHandleCreated &am ...
final and sealed
一、Java — final
任何变量前被 final 修饰就是 final 变量,定义的类前被 final 修饰就是 final 类,任何方法前被 final 修饰就是final方法。
当用 final 修饰一个类时,表明这个类不能被继承。
“使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的 Java 版本中,不需要使用 final 方法进行这些优化了。“ ——《Java编程思想》第四版第143页
final方法是静态绑定的,在编译时就确定好是哪个类的方法,所以final方法比非final方法更快一些。
1234567891011public class Main { ...
编程实现修改Windows指定文件夹图标
编程实现修改Windows指定文件夹图标思路
在指定的文件夹下添加desktop.ini文件
cmd命令更新文件夹配置
desktop.ini123456789101112131415161718192021222324; 文件夹图标[.ShellClassInfo];设置文件夹的备注InfoTip=this is temp file;局限性资源名称,会修改文件的显示名称,但是原始的文件名不变LocalizedResourceName=MyTempFilePRo;设置icon的顺序IconIndex=mainicon;设置icon位置IconFile=%userprofile%\Desktop\bitbug_favicon.ico; 文件夹背景[ExtShellFolderViews][{BE098140-A513-11D0-A3A4-00C04FD706EC}];定义图片背景IconArea_Image=%userprofile%\Desktop\temp.jpg;定义文字的颜色IconArea_Text=0x000000FF;标示文件夹所有者[DeleteOn ...
批处理
批处理批处理可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来批处理是基于cmd的循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。第三,每个编写好的批处理文件都相当于一个DOS的外部命令 你可以把它所在的目录放到你的DOS搜索路径变量%path%(详见后面)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。
作用简单的说,批处理的作用就是自动的连续执行多条命令。
这里先讲一个最简单的应用:在启动wps软件时,每次都必须执行(>前面内容表示DOS提示符):
C:>cd wps
C:\WPS>spdos
C:\WPS>py
C:\WPS>wbx
C:\W ...
Winform窗体自动隐形插件
Winform窗体自动隐形插件效果展示效果展示
下载FormDisplayControl.dll 提取码:shsh
引用123456789101112/// <summary>/// 窗体隐形/// </summary>/// <param name="form">需要隐形的窗体</param>public void invisibility(Form form){ SHSHControl shshCtrl = new SHSHControl(); //开启隐形 shshCtrl.Control(form); //关闭隐形 shshCtrl.DelControl(form);}
Code12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 ...
Git bash 使用
Git bash 使用Git安装安装Git时在勾选组件项,只需勾选Git Bash Here,其他一路next即可。
初始化本地库在本地新建文件夹作为本地库位置,右键 ——》Git Bash Here 打开bash命令行
1git init #初始化本地库
设置用户12git config --global user.name "Your Name" #设置用户git config --global user.email "Your Email" #设置邮箱
检查本机密钥1$ cd ~/. ssh #检查本机已存在的ssh密钥
如果电脑上已经存在密钥,就会显示…/.ssh: Is a directory
如果电脑上没有密钥,那就显示…/.ssh: No such file or directory
id_rsa.pub —— 公钥
id_rsa —— 私钥
如果本机没有密钥,需要生成密钥:
1ssh-keygen -t rsa -C "Your Email" #生成密钥
配置密钥在GitH ...
7.1
念为中华民族伟大复兴而无私奉献的先辈,赞为实现伟大中国梦而砥砺前行的国家脊梁!
JDK1.8安装及配置
JDK1.8安装及配置JDK1.8安装包——提取码:SHSH环境变量配置系统变量
新建变量
变量名:Java_Home
变量值:JDK安装路径
变量名:CLASSPATH
变量值:.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar
添加变量(不用建)
变量名:Path
变量值:%Java_Home%\bin;%Java_Home%\jre\bin;
n;`
安装VisualStudio10后打开提示升级安装Service Pack 1
安装VisualStudio10后打开提示升级安装Service Pack 1下载安装VS2010后打开提示升级安装Service Pack 1
Service Pack 1 64&32位下载地址——提取码:shsh
下载对应版本的SP1后,用解压软件解压ISO文件,打开“setup.exe”安装,安装完成后Visual Studio 2010即可正常打开。��可正常打开。。�
DataRecovery
数据恢复(DataRecovery)文件删除机理
系统在存储一个文件时,首先在一个记录所有空间使用情况的表格中,找到足够容纳新文件的空间,然后把文件内容写到相对应的硬盘扇区上,最后在表格中标出该空间被占用了。
当要删除一个文件时,一般并不对实际文件所占用的扇区进行操作,而仅仅是在该表格中指明那些空间是空白的,可以分配给别的文件使用。这时,被删除的文件的实际内容并没有受到破坏,可以恢复回来。
但删除文件后,又重新创建了文件,那么被删除文件所占用的扇区就有可能被新创建的文件所使用,这时就无法恢复原来被删除的文件了。
回收站清空恢复
Windows + R 打开 ” 运行 “ 窗口,输入regedit点击确定打开注册表编辑器;
在注册表编辑器界面依次展开“HKEY_LOCAL_MACHINE” - “SOFTWARE” - “Microsoft”-“Windows” - “CurrentVersion” - “Explorer” - “DeskTop” - “NameSpace”
在右侧空白右键 - 新建 - 项,重命名为{645FFO40——5081——101B——9F08 ...
C++
年轻人,你的职责是平整土地,而非焦虑时光,你做三四月的事,在八九月自有答案。
—— 余世存 《时间之书》
定义宏常量123456789101112131415161718192021222324#include<iostream>using namespace std;//定义宏常量#define Day 7;int main(){ //cout << "Hello World !" << endl; int x = Day; const int Month= 12; //Month = 24;错误 const 常量 修饰常量 cout <<"一周有" << x << "天" << endl; cout <<"一年有" << Month << "月" << endl; system("pause"); ...