remove()和直接使用system的一个差别
1、事出有因
今天在做一个从web页面中得到POST回应数据的时候。须要把暂时目录里面(包括子文件)内容清空。本来一直使用的是system("rmdir /s /q ..//tmp//data.txt")、后面測试使用system("del /s /q ..\\tmp\\data.txt")也是能够清空缓存数据文件的,可是发现这个每次都会显示出控制台的黑框。并且我这个目录是大概每隔2秒中,要清空一次的。
所以删除多了之后,黑框会越来越多。
总之非常不好!
2、暂时解决的方法
暂时的一个解决的方法。设置控制台命令的属性,让其进行隐藏执行。代码例如以下:
BOOL SystemHide(char* CommandLine)
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead, &hWrite, &sa, 0))
{
return FALSE;
} STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//关键步骤,CreateProcess函数參数意义请查阅MSDN
if (!CreateProcess(NULL, CommandLine, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
return FALSE;
}
CloseHandle(hWrite);
char buffer[4096] = { 0 };
DWORD bytesRead;
while(true)
{
memset(buffer, 0, strlen(buffer));
if(ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL)
{
break;
}
//buffer中就是运行的结果,能够保存到文本,也能够直接输出
//printf(buffer);//这行凝视掉就能够了
Sleep(100);
}
return TRUE;
}
代码就不详解了。说说结果吧。
已经可以隐藏掉控制台的窗体了。但有的时候,并不能删掉相应的文件,我也不知道为何,后面总认为应该在c++中有相应的api吧,就没在纠结了(略微看了一下,总认为是传入函数的參数少个一个/导致的)。
3、找到相应的函数
并且还是跨平台的!本来就要打算用ofstream再又一次覆盖掉相应的文件了!没想到google了下,发现了这个函数能够直接删除文件,还是个跨平台的!
使用时就须要传进来一个path。我这里没涉及到chmod,所以直接使用(假设涉及,还须要使用system或者别的api改变文件的权限)。
remove("..\\tmp\\data.txt");
这是他整个函数的源码。事实上也就是使用了windows的DeleteFile整个api:
int __cdecl remove (
const char *path
)
{
wchar_t* pathw = NULL;
int retval; if (path)
{
if (!__copy_path_to_wide_string(path, &pathw))
return -1;
} /* call the wide-char variant */
retval = _wremove(pathw); _free_crt(pathw); /* _free_crt leaves errno alone if everything completes as expected */ return retval;
} #else /* _UNICODE */ int __cdecl _wremove (
const wchar_t *path
)
{
ULONG dosretval; if (!DeleteFileW(path))
dosretval = GetLastError();
else
dosretval = 0; if (dosretval) {
/* error occured -- map error code and return */
_dosmaperr(dosretval);
return -1;
} return 0;
}
4、结语
一般的函数,都能在c/c++的库中找到。我上面为了追求高速。使用了system和system的隐藏属性。可是问题多多,用户给我反应说。整个data.txt会越来越大,程序执行2个小时,这个文件的大小已经变成了800多M(没有正确删除,libcurl一直追加了),假设执行一个晚上。将不可设想。
与其使用system里面的命令,还不如直接在c/c++的库中找到相应的函数并使用。
remove()和直接使用system的一个差别的更多相关文章
- rm: cannot remove `xxx': Read-only file system
linux 中出现 Read-only file system - Aidon博客 - CSDN博客 https://blog.csdn.net/u010839779/article/details/ ...
- Unix:关于一个file在file system和disk中占用空间
參考文献: Harley Hahns:Guide to Unix and Linux. Chap 24 -->首先要有的关键概念:the amount of "disk space&q ...
- X Window System介绍
1.概述 X Window System是1984年由麻省理工学院(MIT)和DEC公司共同开发研究的,是执行在UNIX系统上的视窗系统.严格地说,X Window System并非一个软件, ...
- 一个小时学会Git
一.版本控制概要 Git 是一种在全球范围都广受欢迎的版本控制系统.在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本控制变得前所未有的重要.但跟踪变化远远不能满足现代软件开发行业的协同需求, ...
- 从零讲解搭建一个NIO消息服务端
本文首发于本博客,如需转载,请申明出处. 假设 假设你已经了解并实现过了一些OIO消息服务端,并对异步消息服务端更有兴趣,那么本文或许能带你更好的入门,并了解JDK部分源码的关系流程,正如题目所说,笔 ...
- 一个普通类就能干趴你的springboot,你信吗?
先声明本人并不是标题党,如果看了本篇文章并且认为没有得到任何收获,请您随便留言骂我,本人绝不还口,已经对springboot了如指掌大大神,求放过! 不BB了,直接上代码,请各位在自己的springb ...
- 一个小时学会Git(转载)
---恢复内容开始--- 一个小时学会Git 最近要与部门同事一起做技术分享,我选择了Git,因为Git 是一种在全球范围都广受欢迎的版本控制系统.在开发过程中,为了跟踪代码,文档,项目等信息 ...
- Linux File System Change Monitoring Technology、Notifier Technology
catalog . 为什么要监控文件系统 : hotplug . udev . fanotify(fscking all notification system) . inotify . code e ...
- Iterator的remove方法可保证从源集合中安全地删除对象(转)
如果对正在被迭代的集合进行结构上的改变(即对该集合使用add.remove或clear方法),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModificationExcept ...
随机推荐
- 使用数组实现队列----《数据结构与算法分析---C语言描述》
一.h文件:my_que.h #ifndef _MY_QUE_H_ #define _MY_QUE_H_ struct QueRecord; typedef struct QueRecord* que ...
- Oculus Rift DK2 安装所需电脑配置
系统支持:眼下使用的SDK0.4支持windows7,windows8,windows8.1.Mac(10.8,10.9): 硬件配置:官方给的标准配置为2.0+GHz以上CPU.2GB内存.兼容Di ...
- NYOJ10,skiing
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区域必须向下倾斜,并且 ...
- PHP - 接口 - 单一接口
/* * 接口的使用 */ //定义接口 interface IPerosn{ public function eat(); public function water(); } //定义继承自接口的 ...
- 深入浅出OpenStack云计算平台管理(nova-compute/network)
一.本课程是怎么样的一门课程(全面介绍) 1.1. 课程的背景 OpenStack是 一个由Rackspace发起.全球开发者共同参与的开源项目,旨在打造易于部署 ...
- SQL 2008 数据库迁移
1,改动迁移路径 USE master GO ALTER DATABASE 数据库名 --主数据 MODIFY FILE(NAME='数据库名', FILENAME='F:\DataBase\数据库 ...
- JS - 焦点图
下载地址:http://www.lanrentuku.com/js/jiaodiantu-1076.html 修改焦点图: CSS代码: /* 懒人图库 搜集整理 www.lanrentuku.com ...
- Eequal sum sets
Let us consider sets of positive integers less than or equal to n. Note that all elements of a set a ...
- 给线程发送消息让它执行不同的处理(自己建立消息循环,非常有意思) good
unit Unit2; interface usesSystem.Classes, Windows, Messages; constWM_DO = WM_USER + 1; typeTDemoThre ...
- Solarized Colorscheme for IntelliJ IDEA
Solarized Colorscheme for IntelliJ IDEA Original Solarized color scheme developed by Ethan Schoonove ...