delphi 在用了SelectDirectory函数操作文件夹以后如何删除被选中的文件夹?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 在用了SelectDirectory函数操作文件夹以后如何删除被选中的文件夹?相关的知识,希望对你有一定的参考价值。

由于用了SelectDirectory函数在选择浏览的文件夹时貌似将文件夹给锁住进行了写保护,所以本来可以讲文件夹删除的函数无法将文件夹删除,看了SelectDirectory函数的代码,但是才疏学浅,无法理解是如何锁的,哪位大能能解答一下,什么方法可以解锁文件夹并成功删除?
var
sdir:string;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
if SelectDirectory(选择目录','d:\后期处理文件夹',sDIR) then begin
pathstr.Caption:=sdir;
filelist:=tstringlist.Create;
makelist(filelist,sdir);
page.Caption:='共'+inttostr(filelist.Count)+'张底片';
button3.Enabled:=true;
end;
except
showmessage('文件检索失败');
end;

procedure tform1.Makelist(var ss:tstringlist;const filepath: string);
var
Sr : TSearchRec;
Err : integer;
begin
ss.Clear;
Err:=FindFirst(filepath+'\*.*', $11, Sr) ;
While (Err = 0) do
begin
if Sr.Name[1]<>'.' then
begin
if AnsiUpperCase(Copy(sr.Name, Length(sr.Name) - 3, 4)) = AnsiUpperCase('.jpg') then
ss.Append(sr.Name);
end;
Err:=FindNext(Sr);
end;
end;

代码里面缺少findclose,当然不能正常删除。

SelectDirectory 函数
通过显示一个对话框来让用户选择一个目录。
注意:在使用前要在Uses 语句中添加包含FileCtrl 的说明。
函数原型如下:
function SelectDirectory(const Caption: string; const Root: WideString;
out Directory: string): Boolean; overload;
function SelectDirectory(var Directory: string; Options: TSelectDirOpts;
HelpCtx: Longint): Boolean; overload;
对于第1 个重载函数,参数Caption 为对话框的标题内容;参数Root 指定一个目录,为进行浏览的最初目录;选中的目录保存在参数Directory 中。
对于第2 个重载函数,参数Directory 中指定的目录为对话框显示时选中的目录,最后用户选定的目录也保存在参数Directory 中;参数Options 为一些设置项目的集合,如果为空,则用户通过对话框只能选择已经存在的目录,没有提供编辑框给用户来输入一个新的目录名。TSelectDirOpts 类型定义如下:
type
TSelectDirOpt = (sdAllowCreate, sdPerformCreate, sdPrompt);
TSelectDirOpts = set of TSelectDirOpt;
具体数值的含义如下。
• sdAllowCreate 对话框中有一个Edit 组件,用户可以输入新的目录名。但是如果要新建该目录,程序员必须根据获取的文件自己编写代码新建目录。
• sdPerformCreate 对话框中有一个Edit 组件,用户可以输入一个不存在的目录名,对话框将选中该目录并创建该目录。
• sdPrompt 对话框中有一个Edit 组件,如果用户输入的目录名不存在,则显示一个信息对话框提示是否创建新目录。如果同时选中的是sdAllowCreate 设置,则程序员必须根据获取的文件自己编写代码新建目录。
参考技术A 要是文件夹“被锁”,也肯定不是SelectDirectory的问题造成的。估计是其它的问题,例如存在只读文件/文件夹未清空删除文件夹/有打开的文件..........追问

调试过了,确实是因为这个函数的问题,我用了另外一个按钮触发删除文件夹的时候没有用这个函数就可以删除,而且后面的删除过程用的是遍历,删到文件夹为空就删不了了,应该是这个函数的问题

追答

贴代码吧

SelectDirectory 仅仅用来返回一个带路径的字符串而已

本回答被提问者采纳

什么?现在还有人在用 Delphi?!

1 前言

大家好,我是明哥!

最近跟一名资深的 IT 咨询顾问在一起交流,他提到了一件事情,他在 2017 年接触到了一家公司,这家公司的主力产品竟然还是基于Delphi开发的,而不是更加主流的技术栈比如JAVA等。这件事情让他震惊不已,也让我感到不可思议。

2 一个好的产品,在技术选型上应该具备什么特点?

笔者认为,一个好的产品,在技术层面上,需要是基于当前主流技术栈做出的,稳定高效且易于使用的产品;但同时,又要是顺应行业技术发展趋势,有一定技术前瞻性,能适应未来技术变化的产品

这样才能即照顾了当前阶段,能够快速作出产品原型,快速推向市场占有市场,进而为企业创造价值;另一方面,又能面向未来,能应对市场的不断变化,敏捷式地持续迭代,推出新功能应对新需求。

3 一家企业的主力产品在2017年采用的技术栈主要还是Delphi,说明了什么?

回头想想,各个行业的各家公司,发展阶段都不太相同,在其具体产品的具体技术栈的选择上,有所差异是正常的。

但是一家企业的主力产品,在2017年采用的技术栈,主要还是Delphi,这说明,很多公司的很多架构师,在对技术趋势的评估判断上,能力是有所欠缺的。

笔者觉得,这背后的原因,固然有人有惰性,为求产品稳妥而因循守旧的性格原因;但更多的方面,也是因为没有好的渠道来了解技术发展趋势和学习前沿技术的客观原因。

这也是为什么,企业的人才战略,一方面会鼓励已有员工持续学习不断学习,另一方面也会不断引进外部的新鲜血液补充企业人才背景的多样性的原因。(甚至有些企业会采用末尾淘汰制来去旧迎新,所谓外来的和尚会念经,也是有一定道理的)。

4 有哪些渠道来了解技术发展趋势和学习前沿技术?

那么有哪些渠道可以了解技术发展趋势学习新技术呢?

  • 可以多参加行业的各种线下和线上技术峰会,比如行业/社区/厂商/机构举办的各种 summit 和 meetup;

  • 可以利用新媒体如 twitter/youtube/slack 和 github/gittee 等多种渠道,关注社区/厂商/咨询机构/个人等的动态,官方文档和技术博客等;

  • 可以主动多跟同行业不同公司的从业人员多多交流讨论;

  • 有条件的话,可以订阅 IT 咨询公司的各种技术趋势分析报告等。

其中最后一条的IT咨询公司,市面上有很多,其中的一家佼佼者是 Gartner。Gartner 作为 IT 行业的裁判员一般的存在,有各种分析报告,从不同角度带大家了解行业技术的发展趋势。

这其中,不得不提的一个报告是 Gartner Hype Cycle。

5 介绍下 Gartner hype cycle

Gartner Hype Cycle, 直译为炒作周期, 大家一般称为技术成熟度曲线,是 Gartner 对各种新技术或其他创新的典型发展过程的图形化的描述。

Gartner 作为IT行业的裁判员一般的存在,自 1995 年起,每年都针对各种技术和应用领域创建 90 多张技术成熟度曲线,用来帮助客户跟踪技术的成熟度和未来潜力。

Gartner 将每项技术的发展过程分为五个阶段:

  • 创新萌发期/技术萌发期(Innovation Trigger):技术成熟度曲线从技术突破、公开示范、产品发布或引起媒体和行业对一项技术创新的兴趣的其他事件开始;

  • 顶峰期/过热期/期望峰值期(Peak of Inflated Expectations):在这种新技术上的建设和预期出现高峰,超出其能力的当前现实,有些情况下会形成投资泡沫;

  • 低谷期/幻灭期(Trough of Disillusionment):不可避免地,人们对结果的失望开始取代人们最初对潜在价值的热望。绩效问题、低于预期的采用率或未能在预期时间获得财务收益都导致预期破灭;

  • 爬升期/复苏期(Slope of Enlightenment):一些早期采纳者克服了最初的困难,开始获得收益,并继续努力前行。基于早期采纳者的经验,人们对可以获得良好效果的技术应用区域和方法加深了理解,更为重要的是,人们知道了这种技术在哪些方面没有或几乎没有价值;

  • 稳定期/成熟期(Plateau of Productivity):技术的实际效益得到证明和认可后,越来越多的企业感到可以接受当前已经大幅降低的风险水平。由于生产价值和使用价值,技术采用率开始快速上升(“曲棍球棒形”),渗透很快加速。

hype-cycle

笔者曾有一篇博文,通过历年 Gartner hype cycle 来了解看大数据行业的发展历史和趋势,大家可以一看。

从历年 Gartner hype cycle 看大数据行业的发展历史和趋势

从技术视角看大数据行业的发展趋势

!关注不迷路~ 各种福利、资源定期分享!欢迎小伙伴们扫码添加明哥微信,后台加群交流学习。

IT明哥

以上是关于delphi 在用了SelectDirectory函数操作文件夹以后如何删除被选中的文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi XE5 Android Dialogs 对话框(模拟做了一套)

使用 TOpenDialog 选择目录

选择一个文件夹 - Delphi

delphi中如何opendialog1.FileName;只能打开文件,如何打开目录获得目录路径

什么?现在还有人在用 Delphi?!

我在用delphi2007打开一个delphi工程文件的时候,出现下列错误: 请高手指点