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

VC实用小知识总结 (一),转http://blog.csdn.net/myiszjf/article/details/10007431

在上一篇中,我们以经介绍了程序的流程和框架,在本篇将详细讨论各个功能的实现主要包括


1.获取磁盘信息
2.获取目录信息
3.获取文件信息
4.运行指定文件
5.删除指定文件
6.删除指定目录
7.创建指定目录
8.上传下载文件
9.获取远程文件图标


获取磁盘信息

磁盘信息可以用API GetDriveType来实现,它以路径名作为参数(如C:/)返回磁盘类型,其实例代码如下

DWORD GetDriverProc(COMMAND command,SOCKET client)
{
for(char i='A';i<='Z';i++)
{
char x[20]={i,':'};
UINT Type=GetDriveType(x);
if(Type==DRIVE_FIXED||Type==DRIVE_REMOVABLE||Type==DRIVE_CDROM)
{
/*返回处理结果...*/
}
}
return 0;
}

GetDriveType可能返回的结果如下

#define DRIVE_UNKNOWN    0 // 无效路径名
#define DRIVE_NO_ROOT_DIR   1 // 无效路经,如无法找到的卷标
#define DRIVE_REMOVABLE 2 // 可移动驱动器
#define DRIVE_FIXED        3 // 固定的驱动器
#define DRIVE_REMOTE    4 // 网络驱动器
#define DRIVE_CDROM        5 // CD-ROM
#define DRIVE_RAMDISK    6 // 随机存取(RAM)磁盘

在上面的实例代码中我们只取,硬盘,光驱和移动磁盘




获取目录信息




这里只要枚举用户指定的目录就可以了,其实例代码如下:

DWORD GetDirInfoProc(COMMAND command,SOCKET client)
{
/*command为要枚举的路径如(C:/)client为返回结果的SOCKET句柄*/

FILEINFO fi;
memset((char*)&fi,0,sizeof(fi));

strcat((char*)command.lparam,"*.*");//枚举所有文件

CFileFind file;
BOOL bContinue = file.FindFile((char*)command.lparam);

while(bContinue)
{
memset((char*)&fi,0,sizeof(fi));

bContinue = file.FindNextFile();
if(file.IsDirectory()) //为目录
{
fi.IsDir=true;
}
strcpy(fi.FileName,file.GetFileName().LockBuffer()); //保存文件名称

if(send(client,(char*)&fi,sizeof(cmd),0)==SOCKET_ERROR)
{
cout << "Send Dir is Error/n";
}
}
return 0;
}



获取文件信息


以下实例代码用来获取 文件的名称,路径,时间,属性等信息

DWORD FileInfoProc (COMMAND command,SOCKET client)
{
/*command为要查看的文件如(C:/TEST.EXE)client为返回结果的SOCKET句柄*/
FILEINFO fi;
HANDLE hFile;
WIN32_FIND_DATA WFD;
memset((char*)&WFD,0,sizeof(WFD));
if((hFile=FindFirstFile((char*)command.lparam,&WFD))==INVALID_HANDLE_VALUE) //查看文件属性
{
fi.Error=true;
return 0;
}
//得到文件的相关信息
SHGetFileInfo(WFD.cFileName, 
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME );
strcpy(fi.FileName,(char*)command.lparam); //文件路径
FileLen=(WFD.nFileSizeHigh*MAXDWORD+WFD.nFileSizeLow)/1024; //文件长度
fi.FileLen=FileLen;
//转化格林时间到本地时间
FileTimeToLocalFileTime(&WFD.ftLastWriteTime,&localtime);
FileTimeToSystemTime(&localtime,&systime);
//文件修改时间
sprintf(stime,"%4d-%02d-%02d %02d:%02d:%02d",
systime.wYear,systime.wMonth,systime.wDay,systime.wHour,
systime.wMinute,systime.wSecond);
if(GetFileAttributes((char*)command.lparam)&FILE_ATTRIBUTE_HIDDEN)
{
/*隐藏文件...*/
}else
if(GetFileAttributes((char*)command.lparam)&FILE_ATTRIBUTE_READONLY)

/*只读文件...*/
}
send(client,(char*)&fi,sizeof(fi),0);
FindClose(hFile);
return 0;
}




运行指定文件

运行文件 有以下几种方法 1.WinExec 2.ShellExecute 3.CreateProcess

这里使用的是ShellExecute其实例代码如下

DWORD ExecFileProc (COMMAND command,SOCKET client)
{
/*command为要运行的文件路径如(C:/TEST.EXE)client为返回结果的SOCKET句柄*/

COMMAND     cmd;
memset((char*)&cmd,0,sizeof(cmd));
cmd.ID=ExecFile;

if(ShellExecute(NULL,"open",(char*)command.lparam,NULL,NULL,SW_HIDE)<(HINSTANCE)32)
{
strcpy((char*)cmd.lparam,"文件执行失败!");
send(client,(char*)&cmd,sizeof(cmd),0);
}
else
{
strcpy((char*)cmd.lparam,"文件执行成功!");
send(client,(char*)&cmd,sizeof(cmd),0);
}

return 0;
}

API函数ShellExecute原形为: 

HINSTANCE ShellExecute(    
HWND hwnd,             //窗口句柄 
LPCTSTR lpOperation, //操作类型 
LPCTSTR lpFile,          //文件指针 
LPCTSTR lpParameters,    //文件参数 
LPCTSTR lpDirectory, //缺省目录 
INT nShowCmd          //显示方式 
);    

这是一个相当有意思的函数,在调用此函数时只须指定要执行的文件名,而不必管用什么程序去打开
或执行文件,WINDOWS会自动根据要打开或执行的文件去判断该如何执行文件或用什么程序去打开文件,如果
要求不高的话比CreateProcess要好用的多,如果想做出像NCPH和灰鸽子那样带参数执行的话,其实也不难
只要指定lpParameters为执行参数就可了


删除指定文件

DWORD DelFileProc (COMMAND command,SOCKET client)
{
/*command为要删除的文件路径如(C:/TEST.EXE)client为返回结果的SOCKET句柄*/
COMMAND     cmd;
memset((char*)&cmd,0,sizeof(cmd));
cmd.ID=DelFile;
SetFileAttributes((char*)command.lparam,FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
if(DeleteFile((char*)command.lparam)==0)
{
strcpy((char*)cmd.lparam,"文件删除失败!");
send(client,(char*)&cmd,sizeof(cmd),0);
}
else
{
strcpy((char*)cmd.lparam,"文件删除成功!");
send(client,(char*)&cmd,sizeof(cmd),0);
}
return 0;
}

需要注意的是在 DeleteFile前应该去文件的系统和隐藏属性,否则会删除失败


删除目录

可以用RemoveDirectory函数删除目录,但是RemoveDirectory有个缺点就是只能删除为空的的目录,对于不为空
的目录就无能为力了,想要删除不无空的目录可以使用下面的实例代码

BOOL DeleteDirectory(char *DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
   IsFinded=(BOOL)tempFind.FindNextFile();
   if(!tempFind.IsDots())
   {
      char foundFileName[200];
      strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
      if(tempFind.IsDirectory())
      {
         char tempDir[200];
         sprintf(tempDir,"%s//%s",DirName,foundFileName);
         DeleteDirectory(tempDir);
      }
      else
      {
         char tempFileName[200];
         sprintf(tempFileName,"%s//%s",DirName,foundFileName);
SetFileAttributes(tempFileName,FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
         DeleteFile(tempFileName);
cout <<"now delete "<<tempFileName<<"/n";
      }
   }
}
tempFind.Close();
if(!RemoveDirectory(DirName))
{
   return FALSE;
}
return TRUE;
}

这个函数的代码可以参照上面 枚举目录的代码来看,它的原理就是枚举目录下的所有文件并删除,最后删除
指定目录,成功返回TRUE失败则返回FALSE,这段代码可以直使用,但要小心使用,因为我在传参数时的失误
结果把整个D盘差点清空了..........




创建目录

实例代码如下:

DWORD CreateDirProc (COMMAND command,SOCKET client)
{
/*command为要创建目录的路径如(C:/)client为返回结果的SOCKET句柄*/
COMMAND     cmd;
memset((char*)&cmd,0,sizeof(cmd));
cmd.ID=CreateDir;
if(::CreateDirectory((char*)command.lparam,NULL))
{
strcpy((char*)cmd.lparam,"创建目录成功!");
send(client,(char*)&cmd,sizeof(cmd),0);
}
else
{
strcpy((char*)cmd.lparam,"创建目录失败!可能有重名文件或文件夹");
send(client,(char*)&cmd,sizeof(cmd),0);
}
return 0;
}


在创建目录时应该注意几点,首先创始目录的上层目录必须是存在的,比如想创建C:/DIR1/DIR2目录,要求
DIR1是必须存在,用CreateDirectory并不能创建多级目录.再者不可以存在和要创建目录同名的目录和文件
因为在磁盘上目录和文件的存放格式是相同的,惟一不同的是 目录的属性与文件属性不同
(FILE_ATTRIBUTE_DIRECTORY属性),所在即使有同名文件也会创始失败.




上传下载文件

上传下载是是文件管理的重点所在,在这里按文件的大小,分两种情况讨论文件的传输方法

小文件的传输相对比较简单可按以下方法进行

1.首先发送文件长度和名称
2.跟据文件长度建立缓冲区
3.读取整个文件到缓冲区
4.发送缓冲区里的内容

其实现代码如下:

CFile file;
FILEINFO fileinfo;
if(file.Open(path,CFile::modeRead|CFile::typeBinary))
{
fileinfo.FileLen=file.GetLength(); //文件长度
strcpy(fileinfo.FileName,file.GetFileName()); //文件名称
send(client,(char*)&fileinfo,sizeof(fileinfo),0); //发送长度和名称

char *date=new char[fileinfo.FileLen]; //分配和文件长度相同的缓冲区
int nLeft=fileinfo.FileLen;
int idx=0;
file.Read(date,fileinfo.FileLen); //读整个文件到缓冲区
while(nLeft>0)
{
int ret=send(client,&date[idx],nLeft,0); //发送文件
if(ret==SOCKET_ERROR)
{
break;
}
nLeft-=ret;
idx+=ret;
}
file.Close();
delete[] date;
}
跟据上面的实例相信大家可以领悟到文件传输的基本原理和方法,虽然很简单但用它传输小文件还是非常实用的


大文件传输方法

用上面的方法传输小文件还可以,但是大文件呢?比如一个500M的电影.上面的方法就会力不从心了因为
按思路要创建一个跟文件大小相同的缓冲区,显然这是不太现实的,我们就得采用另种方法了,在这里我们使用
分块文件传输,所谓分块是指把大文件分成若干小文件,然后传输,比如设定每块大小为64KB其思路如下


1.取得文件长度和名称
2.跟据长度/64KB计算文件块数
3.分配64KB缓冲区
4.读文件到缓冲区
5.发送缓冲的数据
6.重复4,5两步直到发完所有数据

其实现代码如下:

#define CHUNK_SIZE (64*1024) //分为64K块传输

DWORD   GetFileProc (COMMAND command,SOCKET client)
{
/*command为要下载文件的路径如(C:/TEST.EXE)client为发送文件的SOCKET句柄*/

COMMAND     cmd;
FILEINFO fi;
memset((char*)&fi,0,sizeof(fi));
memset((char*)&cmd,0,sizeof(cmd));
cmd.ID=GetFile;

CFile file;
int nChunkCount=0; //文件块数

if(file.Open((char*)command.lparam,CFile::modeRead|CFile::typeBinary))//打开文件
{
int FileLen=file.GetLength(); //取文件长度
fi.FileLen=file.GetLength();
strcpy((char*)fi.FileName,file.GetFileName()); //取文件名称
memcpy((char*)&cmd.lparam,(char*)&fi,sizeof(fi));
send(client,(char*)&cmd,sizeof(cmd),0); //发送文件名称和长度

nChunkCount=FileLen/CHUNK_SIZE; //文件块数
if(FileLen%nChunkCount!=0)
nChunkCount++;
char *date=new char[CHUNK_SIZE]; //创建数据缓冲区
for(int i=0;i<nChunkCount;i++) //分为nChunkCount块发送
{
int nLeft;
if(i+1==nChunkCount) //最后一块
nLeft=FileLen-CHUNK_SIZE*(nChunkCount-1);
else
nLeft=CHUNK_SIZE;
int idx=0;
file.Read(date,CHUNK_SIZE); //读取文件
while(nLeft>0)
{
int ret=send(client,&date[idx],nLeft,0);//发送文件
if(ret==SOCKET_ERROR)
{
break;
}
nLeft-=ret;
idx+=ret;
}
}
file.Close();
delete[] date;
}
return 0;
}
这样文件传输部分就完成了,止于客户端的实现于上面代码其本相同,只是由读文件变为写文件,详细请参考源代码


获取远程ICO文件图标

我们在文件列表框中需要显示文件的图标,但远程文件的ICO图标是无法直接得到的
猛若RADMIN 黑洞者也没有到(对于EXE文件只显示可执行程序图示),当然了也不见的决对没有......

我们可以通过如下变通方法得到:就是跟据文件的扩展名,从本地注册表中查找对应的程序图标

不过这也有它的缺点对于EXE文件它只能显示一个可执行文件的图示,而且只能显示注册过的图示比如,如果
本机装有WINRAR那么就可以识别.RAR的文件图示,否则就无法识别...

实现方法

CImageList m_ImageList;

m_ImageList.Create(32,32,ILC_COLOR32,10,30); //创建图示
m_list.SetImageList(&m_ImageList,LVSIL_NORMAL); //与列表控件相关连


SHFILEINFO info;
memset((char*)&info,0,sizeof(info));

SHGetFileInfo(fi->FileName,0,&info,sizeof(&info),   SHGFI_ICON|SHGFI_USEFILEATTRIBUTES);//关键所在

int i = m_ImageList.Add(info.hIcon);
m_list.InsertItem(i,fi->FileName,i);

原来我试图在Server端通过上面的代码把info.hIcon句柄保存下来,然后放到Client,在单台电脑上很好使,但
Server在另一台电脑上时就玩完了,因为info.hIcon里保存的句柄是个索引而每台机器上的索引是不相同的所以
直接导致的结果就是:什么也显示不出来.....


到这里程序的主要功能实现就介绍完了,下一篇将详细介绍断点续传和多线程传输的实现

转载于:https://www.cnblogs.com/devc/p/3423222.html

相关文章:

Linux下快速分区格式化大于2T大容量存储

在生产环境中&#xff0c;我们会遇到分区大于2T的磁盘&#xff08;比如&#xff1a;添加一个10TB的存储&#xff09;&#xff0c;由于MBR分区表只支持2T磁盘&#xff0c;所以大于2T的磁盘必须使用GPT分区表&#xff0c;而我们在做raid时会划分多个VD来进行装系统&#xff0c;但…

ubuntu18.04 Desktop版本部署13.2.6版本ceph

文章目录选择系统安装系统网络配置CEPH部署想要查看版本较高的ceph在进行录像业务存储且在磁盘占用率在70%左右时且ceph底层出现slow_request是否会对上层录像业务造成显性影响 所以需要在ubuntu 18.04版本部署mimic版本ceph&#xff0c;先将部署步骤描述如下&#xff1a; 选…

java获取ajax上传的文件,Java使用Ajax异步上传文件

相关代码示例:html代码片段:名称class"layui-input">描述文件请选择配置文件立即提交重置js代码片段://上传配置文件$("#save_config_file").click(function () {var name $("#config_name").val();var desc $("#config_desc").v…

hdu 1423

最长公共上升子序列&#xff1a;O(n*m)的算法&#xff1b; 1 #include<cstdio>2 #include<cstring>3 #define maxn 10004 using namespace std;5 int a[maxn],b[maxn],f[maxn];6 int main()7 {8 int t,n,m;9 scanf("%d",&t); 10 while(t…

从HP发布BSM新版套件看网管与安管的融合

2012年11月底&#xff0c;HP发布了新版的BSM套件。在这个新的套件有一个BSM与ArcSight Logger整合的方案。我之前在RSA2012大会观后感系列文章中也提及过HP的这个动向&#xff0c;就是将网管与安管整合的动向。他们正在按部就班地进行中。不过&#xff0c;由于他们的身躯过于庞…

PHP学习课程和培训方向学习路线分享

PHP学习课程和培训方向学习路线分享 php语言的优越性&#xff0c;集结了很多的开发爱好者&#xff0c;无论行业前景和个人发展来说&#xff0c;php正飞速的发展&#xff0c;php在不断兼容着类似closures和命名空间 等技术&#xff0c;同时兼顾性能和当下流行的框架。版本是7之后…

编译ceph源码:cython module not found问题的解决

环境&#xff1a;centos7.5 ceph版本:12.2.1 在当前环境对ceph源码rpm包进行重新编译 执行命令rpmbuild --rebuild ceph-12.2.1-0.el7.src.rpm 最后出现错误如下&#xff1a; Could not find cython3. Please install Cython. 查看此时对Cython3模块的编译规则 vim /BUILD/ce…

把mysql 中的字符gb2312 改为gbk的方法

第一步&#xff1a;查找mysql的字符: mysql> show variables like %char%;------------------------------------------------------------| Variable_name | Value |------------------------------------------------------------|…

1h2g云服务器做网站,云服务器1h2g

云服务器1h2g 内容精选换一换IP地址组是多个IP地址的集合&#xff0c;可被安全组规则引用&#xff0c;可统一管理具有相同安全要求或需要频繁修改的IP地址。通过使用IP地址组&#xff0c;可有效应对需要重复多次编辑安全组规则的场景&#xff0c;方便管理。您需要先创建一个IP地…

×××S:Reporting Services 技巧

S&#xff1a;Reporting Services 技巧 表达式 1、序号&#xff1a;RunningValue(1, sum, nothing) 2、总记录数&#xff1a; CountRows() 3、今天日期&#xff1a;Today 4、本月初&#xff1a;CDate(Now().ToString("yyyy-MM-01")) 5、换行效果&#xff08;<br/&…

vim 常用指令

1 移动光标 光标动作 hjkl&#xff0c;方向键 移动一位&#xff0c;hjkl代表左、下、上、右 数字0 移至本行开头 ^ 移至本行第一个非空字符&#xff0c;匹配开头 $ 移至本行结尾&#xff0c;可以包含空格 w 移至下一单词或标点的开头…

ceph osd 由于“No space left on device” 异常down,通过扩容文件系统或者显式运行osd进程解决

文章目录ceph版本:环境配置&#xff1a;异常问题&#xff1a;问题解决&#xff1a;总结ceph版本: ceph 12.2.1 环境配置&#xff1a; tier_pool 16个分区大小800G 的osd容量 3副本 data_pool 32个4T盘 3副本 异常问题&#xff1a; ps:在分布式存储中遇到任何问题都不要先…

java云服务器系统选择,java云服务器系统选择

java云服务器系统选择 内容精选换一换登录Windows操作系统弹性云服务器时&#xff0c;无法正常进入系统。自启动系统修复模式&#xff0c;但选择修复选项后报错&#xff0c;无法继续进行系统恢复。Windows文件已损坏。登录管理控制台&#xff0c;选择“计算 > 弹性云服务器”…

WordPress数据库优化技巧

各位站长都知道wordpress用久了就会越来越慢。今天就给大家介绍如何给自己的wordpress提速&#xff0c;分两种方法&#xff1a;1.插件属性wordpress的都知道其插件是相当的多&#xff0c;只要你能想得到的基本都有&#xff0c;在这给大家介绍几个小编知道的插件&#xff1a;WP-…

【JDK7】新特性(2) 语法

2019独角兽企业重金招聘Python工程师标准>>> JDK7对Java语法有少量更新&#xff0c;重点是在易用性和便捷性的改进。 1.二进制字面量 JDK7开始&#xff0c;终于可以用二进制来表示整数&#xff08;byte,short,int和long&#xff09;。使用二进制字面量的好处是&am…

AtcoderCodeForces杂题11.6

Preface NOIP前突然不知道做什么,感觉思维有点江僵化,就在vjudge上随便组了6道ABC DCF Div2 C/D做,发现比赛质量还不错,知识点涉及广,难度有梯度,码量稍小,思维较多. 同时发现vjudge的比赛功能很不错 A. ABC112-D-Partition 难度感觉比NOIP T1简单了些了 首先naiive的想法是枚举…

centos下将vim配置为强大的源码阅读器

每日杂事缠身&#xff0c;让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具&#xff0c;每次熟悉源码都需要先在windows端改好&#xff0c;拖到linux端&#xff0c;再编译。出现问题&#xff0c;还得重新回到windows端&#xff0c;这个过程太耗费时间。 vim作为…

虚拟机看服务器mac地址,虚拟机修改服务器mac地址吗

虚拟机修改服务器mac地址吗 内容精选换一换本章节指导用户为Windows系统的ECS主机添加域名解析并添加安全组&#xff0c;防止下载Agent安装包与采集监控数据时出现异常。修改ECS的DNS配置有两种方式&#xff1a;Windows图形化界面和管理控制台。您可以根据自己的使用习惯选择其…

条件注释判断浏览器!--[if !IE]!--[if IE]!--[if lt IE 6]!--[if gte IE 6]

条件注释判断浏览器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]> <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![endif]--><!--[if IE 6]> 仅IE6可识…

USACO09FEB Fair Shuttle

题目传送门 据说\(NOIp\)前发题解可以\(\mathfrak{RP}\) 因为要尽可能满足更多奶牛&#xff0c;所以按照这种区间贪心题的套路&#xff0c;先按右端点排序&#xff0c;然后依次遍历&#xff0c;能坐车的就让它们坐车&#xff0c;这样一定是最优的。 在贪心的时候&#xff0c;我…

diy高性能存储服务器,diy存储服务器

diy存储服务器 内容精选换一换帮助用户完成专属云服务器备份任务的创建&#xff0c;快速完成服务器数据保护。专属云服务器不支持应用一致性备份。当专属对象存储的容量不足时&#xff0c;会导致专属云服务器备份创建失败。已开通专属对象存储。登录管理控制台。单击&#xff0…

使用内存盘 格式化文件系统以及部署ceph-osd

文章目录创建RAMDISK使用内存盘使用内存盘格式化文件系统使用内存盘部署ceph-osd删除内存盘为了测试内存盘类型的磁盘做ceph osd的io性能&#xff0c;将内存部分空间取出来用作普通物理磁盘(RAMDISK)&#xff0c;并在该磁盘上部署ceph osd支持该操作的系统驱动为brd.koPS &…

iBatis的CRUD操作详细总结

昨天晚上看了一下关于iBatis的一个讲解的视频&#xff0c;讲的和我的这个简单的总结差不多.... 思考了一下还是把主要操作都总结一下吧&#xff0c;当然这里也不是全的&#xff0c;知识简单的CRUD。。。 首先我觉得持久层的操作主要就是这几个&#xff1a; public interface IP…

min聚合函数查询带有额外字段sql|dense_rank()over(partition)|+班级学生成绩最高

oracle爱好者和群snowg的问题 上面的这个&#xff0c;有站点stationid&#xff0c;year&#xff0c;month&#xff0c;day和每天记录的day_tmin字段。现在要求统计处每个stationid下面每月每日的最小day_tmin字段&#xff0c;因为不关注year&#xff0c;所以sql这样写 select …

提升jmeter自身性能

JMeter负载测试时使用GUI界面和较多的收集测试结果的监听器容易造成jmeter的性能瓶颈&#xff0c;远程测试时的控制台尤为明显。提升JMeter负载测试时性能的方法如下&#xff1a; 官方的解决办法&#xff1a;http://jakarta.apache.org/jmeter/usermanual/best-practices.html#…

C++ STL的reserve函数

在阅读ceph源码过程中发现部分C语法还是不够熟悉&#xff0c;特此做一下笔记。 关于STL中的reserve函数的使用 reserve()是为容器预留空间&#xff0c;即为当前容器设定一个空间分配的阈值&#xff0c;但是并不会为容器直接allocate具体的空间&#xff0c;具体空间的分配是在创…

AJAX进行分页

新建数据集&#xff1a;PagingDataSet.xsd SELECT * from ( select id, areaID, area, father,Row_Number() over (order by areaID) rownum FROM dbo.area) t where t.rownum >startRowIndex and t.rownum <endRowIndex在集合中添加两个参数&#xff1a; startRowIndex…

华为服务器引入清空外部配置文件,云服务器还原配置文件

云服务器还原配置文件 内容精选换一换外部镜像文件在从原平台导出前&#xff0c;没有按照“Windows操作系统的镜像文件限制”的要求完成初始化操作&#xff0c;推荐您使用弹性云服务器完成相关配置。流程如图1所示。云服务器的正常运行依赖于XEN Guest OS driver(PV driver)和K…

脚本SFTP定时取Linux服务器文件

为什么80%的码农都做不了架构师&#xff1f;>>> 在工作中尤其是政府机关为了安全方面考虑&#xff0c;通常是不开通服务器与服务器之间FTP服务 如果每天又要巡检服务器&#xff0c;每次都要登录查看某个文件给自己的工作带来很大的不便 这里通过 winscp工具使用S…

使用sigaction处理内核信号

文章目录函数描述函数使用抓取发送信号的进程信息mark一次获取内核信号&#xff0c;并作相应处理的手段linux内核中断机制的一个重要实现就是信号。信号使得内核和用户态的交互更加便捷&#xff0c;这个便捷对开发者来说可以更好的利用系统原生内核来处理信息。《深入理解unix内…