My C++ Blog

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  14 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks

删除指定文件。

object.DeleteFile ( filespec[, force] );

参数

object

必选项。 应为 FileSystemObject 的名称。

filespec

必选项。 要删除的文件的名称。 filespec 可以在最后的路径成分中包含通配字符。

force

可选项。 Boolean 值,如果要删除设置了只读属性的文件,则为 true ;如果不删除则为 false (默认)。

说明

如果找不到匹配的文件则出错。 DeleteFile 方法在遇到第一个错误时终止。 出错后不试图回滚或撤消出错前做的修改。


如果成功返回一个非0值
失败返回0  可以用GetLastError函数得到错误信息

下面的例子说明了 DeleteFile 方法的用法。

function DeleteFile(filespec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.DeleteFile(filespec);
}

我用DeleteFile(spath)去删除一个文件时,竟然没有删除掉.(其中CString spath,spath是一个带有文件名的路径).在CSDN上查了一下发现是EXCEL进程没有关闭.(我做的是EXCEL导入和导出)
程序的过程是:
在导出一张EXCEL表时,会弹出一个另存为的路径选择窗口,可以给要导出的文件命一个名字,如果该名字在所选择的路径下存在了,则提示是否覆盖,要是覆盖则删除该文件,并重新创建一个相同的该文件,否则则获取定义的新的路径+文件名.
如果我已打开了一个文件(该文件的进程存在,而文件本身已经关闭了),在后续的覆盖中,也选择了该文件,就会出现无法删除该文件的情况,必须把该文件的进程关闭.
但是如何获取错误信息呢?
解决方法如下:方法一、
由于DeleteFile()函数是一个BOOL型的,如果删除成功的话,返回非零(即 1 ),否则则返回0.
所以应在返回值为0时,获取错误信息,方法是:
LPVOID lpMsgBuf;
if (!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL ))
{
// Handle the error.
return;
}

// Process any inserts in lpMsgBuf.
// …

// Display the string.
MessageBox( (LPCTSTR)lpMsgBuf, “Error”, MB_OK | MB_ICONINFORMATION );

// Free the buffer.
LocalFree( lpMsgBuf );

方法二
VC有个小工具的。输入错误码,就可以看到原因了。
Tools->Error Lookup
如何获取错误码:
DWORD dwerr = GetLastError();
如果dwerr==0的话,则成功.否则有错误.
在调试的时候将dwerr的值输入到Error Lookup,(并非只是在调试的时候用,只要知道错误码
什么时候都可以查看错误信息)
例如,在value中输入32,则error为”另一个程序正在使用此文件,进程无法访问。”

posted on 2008-06-27 23:04 IP 阅读(6180) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理