【发布时间】:2014-07-19 09:49:10
【问题描述】:
我有这个简单的程序但是我发现了一个问题,在调试的时候我发现Delphi执行ForceDirectories成功但是直接跳到程序的末尾没有执行它后面的行,这是为什么?
var
export_dir: string;
grd_idx: integer;
begin
export_dir := 'c:\app1\export\';
SysUtils.ForceDirectories(export_dir);
showmessage('this line executed then it jump to the end !!');
for grd_idx := 0 to pred(pagecontrol1.ActivePage.ComponentCount) do begin
if (pagecontrol1.ActivePage.components[grd_idx] is Tmycomp) then
ExportToExcel(export_dir+(pagecontrol1.ActivePage.components[grd_idx] as Tmycomp).Name, (pagecontrol1.ActivePage.components[grd_idx] as Tmycomp),
true, true, true, 'xlsx');
end;
end;
我使用的是 Delphi XE5,64 位项目
更新: 我注意到在 showmessage 有一个用于无效断点的 x 图标而不是用于有效断点的红色小图标之后,我还在该行上放置了断点,所以我从程序的开头开始跟踪,我可以确认从以 @ 开头的行开始987654323@循环它没有被执行。
ExportToExcel 是用于将数据导出到 Excel 的内置程序。
【问题讨论】:
-
我刚刚在 XE4 上使用 64 位可执行文件进行了测试,并且代码按预期运行。您能否创建一个完整的 SSCCE 控制台应用程序来复制该行为?
-
什么版本的 Windows,您是否以管理员身份运行?如果
C:\app1文件夹不存在,必须先创建export文件夹才能创建,非admin用户不能在Windows Vista及以上开启UAC的情况下从C:的根目录下创建文件夹.您没有检查ForceDirectories的返回值(或者您可以简单地使用调试 DCU 构建并进入调用以查看失败的原因)。 -
@KenWhite Win7 64bit 作为管理员,文件夹创建成功,我逐步完成了从该行跳转到
end;的代码!!! -
我无法复制它(见我的回答)。同样,我的建议是使用调试 DCU 构建并进入对 ForceDirectories 的调用以查看发生了什么。
-
在您下定决心并为您的问题提供必要的信息之前,我不会检查任何内容。我不知道
ExportToExcel可能会做什么,您要转换为Tmycomp或Tmycomp首先是什么,而且您还不清楚问题出在哪里。
标签: delphi