只读文件就是不能删除的文件,用DeleteFile函数对它来说是毫无意义的,要删除只读文件,只有先改变它的属性。如果你要删除一个文件,最好先作两个方面的考虑:

(1)判断该文件的属性。可以用上面提到的FileGetAttr与FileSetAttr函数。如果属性为只读,将它改为存档,然后删除它。

(2)先用DeleteFile函数试删除一下该文件,如果返回值为假,表示没有删除成功,在对该文件进行属性修改,将它改为存档,然后再用DeleteFile进行删除。

第二种方法是常用的文件删除方法,如果你想彻底删除某文件,而不顾它的属性,最好用这种方法,它的典型写法就是:

1
2
3
4
5
if(not DeleteFile('文件名')) then
begin
    FileSetAttr('文件名',faArchive);
    DeleteFile('文件名');
end;

关于只读文件,还有几点补充说明:

(1)文件存储在不可改动的介质上后,属性自动改为只读,如将文件刻录到光盘后,文件就变为只读了。再将光盘的文件重新拷回磁盘时,文件属性还是只读,如果不改变这个只读属性,这个文件就没法再进行内容写入了。因此,凡将光盘的文件直接拷回到磁盘后,如果这些文件还需要使用,例如进行读与写,就必须去掉只读属性。

(2)只读文件windows NT/2000/xp系统中不能用OpenFile函数打开,为什么要做这样的限制,只有微软才知道。如果你设计的软件要在多平台上运行,一定要在那个平台上测试一下,不是所有的函数都能在各个平台上正常使用的。

(3)用FileCreate文件创建函数,可以将同名的只读文件覆盖,为什么这个函数没有做出限制,也只有微软才知道。

以上这些,只是从程序上讲了如何删除只读文件,如果要在windows上手工操作,什么样的文件都可以删除,可想而知,这个系统的安全性是多么脆弱。

转载请注明出处:http://www.ppblog.cn/delphidelfaarchive.html

delphi删除只读文件的更多相关文章

  1. C#删除只读文件或文件夹(解决File.Delete无法删除文件)

    引用: http://www.jb51.net/article/72181.htm   C#删除只读文件的方法: if (File.GetAttributes(FFName).ToString().I ...

  2. dotnet 删除只读文件

    如果直接通过 File.Delete 删除只读文件会出现没有权限提示,可以先设置文件不是只读然后删除文件 try { File.Delete(file); } catch (UnauthorizedA ...

  3. 转:delphi 删除指定文件夹下所有文件

    function TFtpContentThd.DeleteDirectory(NowPath: string): Boolean; var search: TSearchRec; ret: inte ...

  4. C#删除只读文件

    File.SetAttributes(fileRealPath, FileAttributes.Normal);//先将文件设置成普通属性 //...你的删除文件的代码

  5. DELPHI删除记录文件

    http://blog.itpub.net/729024/viewspace-564890/ DBGrid1.SelectedRows.Delete;

  6. bat 延时删除指定文件夹中的文件经验分享

    1.bat延时 xp程序中通过ping 127.0.0.1 -n 20 来实现延时操作,ping本地地址20行. win7中通过timeout 20 来实现延时20秒. 2.删除指定文件 del /q ...

  7. Windows -- 使用批处理文件.bat删除旧文件

    Windows  --  写一个批处理文件.bat删除旧文件 1. 批处理文件 del_old_file.bat rem 删除D:\temp目录下7天前的文件 Forfiles /p D:\temp ...

  8. int.TryParse非预期执行引发的思考 ASP.NET -- WebForm -- 给图片添加水印标记 Windows -- 使用批处理文件.bat删除旧文件

    int.TryParse非预期执行引发的思考   问题出现 这天在写一个页面,想谨慎些就用了int.TryParse,结果出问题了. 代码如下: Copy int id = 1000; //Reque ...

  9. Windows下使用批处理文件.bat删除旧文件

    本文教大家写一个批处理文件.bat删除旧文件,供大家参考,具体内容如下 1. 批处理文件 del_old_file.bat rem 删除D:\temp目录下7天前的文件Forfiles /p E:\b ...

随机推荐

  1. 随手记今天跟的几个iOS项目代码的问题

    休了一阵子假期,今天刚回来上班,项目代码已经有挺大的变化了,我就先体验.发现.跟进问题. 第一个问题是点击某个cell就挂掉的现象,同事表示必现但挺神奇.由于挂掉的时候没有啥有意义的信息,所以先简单粗 ...

  2. Strange Country II 暴力dfs

    这题点的个数(<=50)有限, 所以可以纯暴力DFS去搜索 //#pragma comment(linker, "/STACK:16777216") //for c++ Co ...

  3. Android自定义组合控件:UIScrollLayout(支持界面滑动及左右菜单滑动)

    一.前言: 我之前很早的时候,写过一篇<左右滑出菜单>的文章: http://blog.csdn.net/qingye_love/article/details/8776650 用的是对V ...

  4. 基于visual Studio2013解决C语言竞赛题之0419误差控制

       题目 解决代码及点评 /************************************************************************/ /* 19 ...

  5. C++ pair 使用方法

    类模板:template <class T1, class T2> struct pair 參数:T1是第一个值的数据类型,T2是第二个值的数据类型. 功能:pair将一对值组合成一个值, ...

  6. C语言,链表反转

    倒序思路:依次把后面的节点移往头部. struct Node{ struct Node* next; int data; }; typedef struct Node NODE; NODE* inve ...

  7. servlet 将输入内容通过拼接页面的方式显示出来

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. C++静态库中使用_declspec(dllexport) 不能导出函数的问题

    在某项目中,有一些静态库,这些静态库中有类型命名的函数GET_XXX.在一次项目结构调整的时候,我想将调用这静态库的代码编译成DLL,并且将这些Get函数导出,我就直接就这些函数前面添加了_decls ...

  9. 墙内安装nautilus-dropbox 1.6.0-2

    软件包:nautilus-dropbox 版本号:1.6.0-2 # aptitude install nautilus-dropbox # less `which dropbox` 查找到下载链接: ...

  10. 关于运行robotium提示连接不上jar问题

    robotium运行测试helloworld报错: java.lang.NoClassDefFoundError: com.jayway.android.robotium.solo.Solo at c ...