【问题标题】:I have a delphi 7 program running on windows 2008 and I get "folder does not exist" error我在 Windows 2008 上运行了一个 delphi 7 程序,但出现“文件夹不存在”错误
【发布时间】:2011-03-21 00:17:51
【问题描述】:

我在这里问过同样的问题: Why does my program say "folder does not exist" when run on Windows 2008?

但是没有一个答案是令人满意的,我的问题仍然存在,所以我决定以另一种方式更详细地问它,因为这个问题真的让我很恼火,我们需要解决这个问题,否则我们必须编写类似的应用程序另一种语言意味着浪费我们的时间。

用delphi 7(32位)编写的程序

运行这个程序的环境是:windows 2008 r2 64-bit

任务程序尝试做:创建3个文件夹然后复制一个声音文件并使用lame命令行(lame.exe)压缩它并将更改保存到数据库中

我得到错误:“‘文件夹’不存在。文件可能已被移动或删除,你想创建它吗?”并导致程序停止

我做过的事情:

1-尝试以管理员身份运行程序

2- 检查事件日志但没有线索

3- 三重检查所需文件夹,所有文件夹均正确

4- 阅读此知识库:http://support.microsoft.com/kb/927387

但我仍然看到这个该死的错误。

我已在此处上传错误图片,您可以清楚地看到: http://i28.tinypic.com/9to6qr.jpg

文件夹名称为C:\Upload_ABC\\2010\07\27\

请注意,我没有在我的程序中编写不需要的对话框,我相信 Windows 2008 会附加它或将它带到我的应用程序中。

请给我一些想法或让我知道我该怎么做?

最好的问候。

【问题讨论】:

  • 请出示相关代码
  • 我已编辑您的消息以包含文件夹名称。
  • C:\Upload_ABC\\2010\07\27\ 有两个问题:它以 C:\Upload_ABC 开头,我很确定大多数应用程序不允许在根目录中创建目录C:\;它还有两个反斜杠 \\ 通常表示目录路径中缺少某些内容。
  • @remko ,我不知道错误到底发生在哪里,所以我相信我应该凭直觉猜测找到问题
  • 你怎么不知道问题出在哪里?当对话框出现时,按下调试器中的“暂停”按钮并查看调用堆栈。无需猜测。

标签: windows delphi


【解决方案1】:

C:\Upload_ABC\\2010\07\27\

路径中有两个反斜杠。使用调试器查看原因。

【讨论】:

  • 如果 delphi 7 在 windows 2008 r2 64bit 上可用,我会使用它的调试器。
  • 你能确认有两个反斜杠实际上会导致任何问题吗?我认为不会。操作系统只是将它们视为一个反斜杠。
  • 这是我要检查的第一件事。消除路径中的双反斜杠并检查应用程序是否正常工作。此外,这可能是一个提示:stackoverflow.com/questions/729151/double-backslash-not-work
【解决方案2】:

路径中两个连续的反斜杠之间是什么?它们之间真的没有任何关系,还是因为它们是 Unicode 而 D7 不支持 Unicode 而删除了某些字符?


由于两个连续的反斜杠之间没有任何内容...

听起来确实像 Windows 在您的程序和您对文件的访问之间使用了它肮脏的小手指。要么尚未创建文件夹,要么一旦创建文件夹,您就被拒绝访问。由于您尝试存储在数据库中的更改涉及压缩文件,因此虚拟化似乎是罪魁祸首,正如您自己提供的链接所解释的那样。

尝试的几种途径:

  • 删除您的 exe(右键单击|属性|兼容性选项卡)上可能触发 Windows 进入的所有兼容性设置。另外不要忘记这可能由诸如“设置”或“更新”之类的东西触发可执行文件名称的一部分。

  • “将应用程序的数据保存在用户配置文件下的文件夹中。” 例如 c:\users\\documents 或类似的(最好不要在实际生产代码中硬编码,但可以用于调试)。毕竟这正是链接的 msdn 文章针对方案 2 给出的建议“你找不到刚刚创建的文件或文件夹”

  • 如果您无法在运行它的机器上进行调试,请返回旧式调试:将跟踪消息添加到您的代码中,以显示您在(和曾经)在代码中的位置并将它们显示在单独表格或类似表格上的备忘录。

  • 确保您不会“吃掉”任何可能为您提供有关正在发生的事情的额外信息的异常情况。

【讨论】:

  • 我省略了额外的反斜杠,但问题仍然存在
【解决方案3】:

您是否针对运行 Delphi 程序的帐户检查了该文件夹结构的访问权限?与工作站上的 Windows 相比,Windows Server 系统在允许用户执行的操作方面往往更具限制性。

此外,我建议将程序的副本剥离到相关功能以显示错误。有了这个,你至少有机会周围的任何人都可以在另一个系统上测试它。

此外,您可以尝试使用 D2010 编译它,看看错误是否仍然存在。如果是这样,您可能有机会找到运行 D2010 调试器的问题。如果您手头没有 D2010,您可能会为此目的安装试用版。

【讨论】:

  • 我已经将所有相应文件夹的权限设置为每个人都可以读/写/执行,我对delphi不太熟悉,这个程序是以前写的,我只有源代码原来是完全相同的编译程序在 windows 2003 上运行起来就像一个魅力
  • @Austin:这意味着 UAC/虚拟化正在成为阻碍,因为据我所知 MS Windows Server 2003 中还没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
相关资源
最近更新 更多