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的一个差别的更多相关文章

  1. rm: cannot remove `xxx': Read-only file system

    linux 中出现 Read-only file system - Aidon博客 - CSDN博客 https://blog.csdn.net/u010839779/article/details/ ...

  2. Unix:关于一个file在file system和disk中占用空间

    參考文献: Harley Hahns:Guide to Unix and Linux. Chap 24 -->首先要有的关键概念:the amount of "disk space&q ...

  3. X Window System介绍

    1.概述     X Window System是1984年由麻省理工学院(MIT)和DEC公司共同开发研究的,是执行在UNIX系统上的视窗系统.严格地说,X Window System并非一个软件, ...

  4. 一个小时学会Git

    一.版本控制概要 Git 是一种在全球范围都广受欢迎的版本控制系统.在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本控制变得前所未有的重要.但跟踪变化远远不能满足现代软件开发行业的协同需求, ...

  5. 从零讲解搭建一个NIO消息服务端

    本文首发于本博客,如需转载,请申明出处. 假设 假设你已经了解并实现过了一些OIO消息服务端,并对异步消息服务端更有兴趣,那么本文或许能带你更好的入门,并了解JDK部分源码的关系流程,正如题目所说,笔 ...

  6. 一个普通类就能干趴你的springboot,你信吗?

    先声明本人并不是标题党,如果看了本篇文章并且认为没有得到任何收获,请您随便留言骂我,本人绝不还口,已经对springboot了如指掌大大神,求放过! 不BB了,直接上代码,请各位在自己的springb ...

  7. 一个小时学会Git(转载)

    ---恢复内容开始--- 一个小时学会Git     最近要与部门同事一起做技术分享,我选择了Git,因为Git 是一种在全球范围都广受欢迎的版本控制系统.在开发过程中,为了跟踪代码,文档,项目等信息 ...

  8. Linux File System Change Monitoring Technology、Notifier Technology

    catalog . 为什么要监控文件系统 : hotplug . udev . fanotify(fscking all notification system) . inotify . code e ...

  9. Iterator的remove方法可保证从源集合中安全地删除对象(转)

    如果对正在被迭代的集合进行结构上的改变(即对该集合使用add.remove或clear方法),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModificationExcept ...

随机推荐

  1. 异常:未能载入文件或程序集”DAL”或它的某一个依赖项——解决的方法

    以下是我再使用抽象工厂+反射重构机房时,在Factoy中出现了以下一个问题: 去网上查了一下资料,发现这是一个非常普遍的问题,它出现的原因主要有两种: 第一种: 载入DLL路径错误.解决的方法是调整D ...

  2. Linux下基于Erlang的高并发TCP连接压力实验

    1.实验环境: 联想小型机: 操作系统:RedHat Enterprise LinuxServer release6.4(Santiago) 内核版本号:Linux server1 2.6.32-35 ...

  3. Java并发编程之闭锁CountDownLatch简单介绍

    闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有不论什么线程能够通过,当到达结束状态时.这扇门才会打开并容许全部线程通过.它能够使一个或多个线程等待一组事件发生. 闭锁状态包含一个 ...

  4. NProxy——Mac和Linux平台下的Fiddler

    Fiddler 相信大家,尤其是前端工程师们都知道. 用它的文件替换功能,将线上的静态资源文件(JS.CSS.图片)替换为本地相应的文件,来调试线上(代码都被压缩过)UI的问题.的确是一神器.(相比, ...

  5. javascript 浏览器兼容性写法

    var event = window.event || arguments.callee.caller.arguments[0]; // 获取event对象 event = event.srcElem ...

  6. 开源JDBC工具类DbUtils

    本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...

  7. Qt生成灰度图(转载)

    Qt生成灰度图(转载)   项目中用到大量基础图像处理知识,其中灰度图的生成是很重要的一环. 先补充一些基础知识: ------------------------------------------ ...

  8. 如何制定AxureRP设计体系

    经常有朋友问我,如何在从来没有用过AxureRP的公司或者团队里面开始使用AxureRP做原型设计?这个问题对个体来说不存在,因为个人学习使用AxureRP时非常快速的,基本试着做几个原型实例就能把整 ...

  9. HDU 4931 Happy Three Friends(水)

    HDU 4931 Happy Three Friends 题目链接 题意:6个数字,一个取两个,妹子取三个,问最后谁会赢 思路:排个序,推断前两个和3 - 5个的和谁更大就可以 代码: #includ ...

  10. Transformations 方块转换

    题目是中文题,就不做什么解释了,纯模拟题,主要要搞清楚这几种装换方式下标的变化: 第一种:顺时针旋转90度: c[j][n-i+1]=a[i][j]; 第二种:旋转180度: c[n-i+1][n-j ...