问题描述:
每次删除都提示正在使用,怎么办?
解析:
删除文件时,经常会碰到Windows提示“文件正在使用”无法删除这样的提示信息。其实,我们除了可以在DOS下执行删除命令外,还可以在Windows中删除它们。具体说来就是用Wininit.ini文件。
一、Wininit.ini文件简介
用过Windows 9x的人都见过如下的提示信息:
Please wait while Setup updates your configuration files.
This may take a few minutes……
这是安装完某个软件或者硬件的驱动程序,应安装程序的要求重新启动Windows后的正常现象,这时Windows在干什么呢?实际上它在执行Wininit.ini给出的指令。Wininit.ini是一个鲜为人知的文件,主要用于删除、更名和更新在Windows运行时不能被施以这些 *** 作的文件,它存在的时间很短,所以显得有点神秘。
二、Wininit文件工作机理
众所周知,在Windows中,一个可执行文件如果正在运行,或者某个库文件(*.dll、*.vxd、*.sys等),正在被打开使用,则它不能被改写或删除。例如,你不可能在资源管理器中删除Windowsexplorer.exe,而在Windows的GDI界面下,有一些文件一直处于这种状态下,除explorer.exe外,还有显示驱动程序库文件,文件子系统库文件等也是这样。如果我们要对这些文件进行升级,改动,就必须在Windows保护模式核心启动前进行,于是Windows就提供了基于Wininit.ini文件的一个机制来完成这个任务。这个机制是,要删除或改写这类文件的应用程序按一定的格式把命令写入Wininit.ini。Windows在重启时,将在Windows目录下搜索Wininit.ini文件,如果找到,就遵照该文件指令删除、改名、更新文件,完成任务后,将删除Wininit.ini文件本身,继续启动过程。所以Wininit.ini文件中的指令只会被执行一次,列目录时也通常没有它的踪影。
三、妙用Wininit.ini文件删除windows下的文件
用Wininit.ini文件删除文件其格式为:
[rename]
filename1=filename2
……
虽然名为“rename”,却可实现删除、改名、更新文件的功能。行“filename1=filename2”相当于依次执行“copy filename2 filename1”及“del filename2”这两个DOS命令。没有用过DOS的朋友可能不知道这两条命令的含义,下面来简单解释一下。命令copy filename2 filename1的意思是复制“filename2”文件,并将新文件命名为filename1;命令del filename2的意思是删除filename2文件。
启动时,Windows将用filename2覆盖filename1,再删除filename2,这就实现了用filename2与更新filename1的目的,如果filename1不存在,实际结果是将filename2改名为filename1;如果要删除文件,可令filename1为nul,例如,打开记事本,输入下面的内容:
[rename]
nul=pathfilename
……
其中[rename]在wininit.ini中可以起到删除和更名文件的作用:“nul”表示是删除文件,“=”后面的部分为你希望删除的文件的完整路径名,要注意的是应该使用文件的短文件名(即“C:Program Files”应该写为“c:progra~1”)。这是因为Wininit.ini文件的处理是在Windows文件系统调入前,所以不支持长文件名。
下面我们看一个完整的例子。假设我们想删除C:Windows文件夹下的记事本程序notepad.exe,可以这样做,打开记事本,输入下面的内容:
[rename]
nul=C:\Windows\notepad.exe
将编辑好的文件另存为wininit.ini文件,保存在Windows系统目录中。重新启动Windows,在重启的过程中,你的记事本程序和wininit.ini文件本身将被删除。另外,如果要删除的是文件夹,用“dirnul”代替“nul”就可以了,注意,“dir”与“nul”之间没有空格,切记切记。
再举个例子,假如你要删除Windowstemp文件夹,就可以这样做,打开记事本,将下面的内容另存为wininit.ini文件,仍然要保存在Windows系统目录中,重启电脑再次进入Windows中,你会发现temp文件夹已经 被删除了:
[rename]
dirnul=C:\Windows\temp
编后语:事实上,Wininit.ini文件的应用很多,除了经常在软硬件的安装程序中用到外,还有软硬件的卸载程序中用到,比如:假设你要为自己的软件编写一个卸载程序,这个卸载程序本身是不可能被自己删除的,因为它试图删除自身时,自身却正在运行。为了清除卸载程序本身,你就得借助于Wininit.ini文件。顺便提一句,在安装Windows的最后阶段,就是利用Wininit.ini文件来清除和更名被安装程序SETUP自身使用的文件。
一、创建文件:
在C语言中创建文件,使用fopen函数,同时指定为只写即可。
参考代码如下:
/*函数功能: 创建文件名为s的文件。
返回值:
-1 参数错误
0 创建成功
1 文件已存在
2 创建失败
*/
int create_file(char *s)
{
FILE *fp
if(s==NULL||s[0]=='\0') return -1//参数为空,即错误参数。
fp= fopen(s, "r")//以只读方式打开
if(fp)//打开成功,表示文件已经存在。
{
fclose(fp)//关闭文件
return 1//返回文件已存在。
}
fp= fopen(s, "w")//以只写方式创建文件。
if(fp == NULL)
return 2//创建失败。
fclose(fp)//关闭文件。
return 0//创建成功。
}
二、删除文件:
在C语言中,有专门的删除文件函数remove。
1、头文件:stdio.h
2、声明:int remove(const char* filename)
3、功能:删除文件名为filename的文件。
4、返回值:删除成功,返回0.否则返回-1.
5、示例代码:
#include <stdio.h>int main()
{
char s[100]
int ret
scanf("%s",s)//输入文件名。
ret = remove(s)//删除文件
if(ret==0)//根据结果给出相应提示
printf("删除文件成功\n")
else
printf("删除文件失败\n")
return 0
}
首先要说明的是这里并不是指删除C编译器里面的文件,呵呵,如果只是要删除那些文件的话,那就很简单,直接选中文件后按delete键就可以删除了,但是我们删除那些文件干嘛?我们还要用它写程序啊,呵呵。我在这里要说的是,怎样使用C语言编写程序来删除文件。在C语言中,我们可以使用remove()函数来删除指定的文件,具体语法为:
Int remove(char *filename)其中filename是一个指向字符串的指针,该字符串可以组成有效的文件名,也可以包含路径说明。如果我们要删除D盘下的ABC.txt文件,我们就可以这样写:remove(“D:\ABC.txt”)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)