在D中打开文件

Nor*_*löw 2 file-io d exception

如果我想安全地尝试在D中打开文件,则是首选方法

  1. 尝试打开它,捕获异常(并可选择找出原因)如果失败或
  2. 检查它是否存在,是否可读,然后才打开它

我猜测第二种替代结果会产生更多IO并且更复杂吗?

Vla*_*eev 6

如果根据正常的程序操作和给定的用户输入预期文件在那里,则使用1 - 只是尝试打开文件并依赖异常处理来处理文件不存在的异常情况.

例如:

/// If the user has a local configuration file in his home directory, open that.
/// Otherwise, open the global configuration file that is a part of the program,
/// and should be installed on all systems where the program is running.
File configFile;
if ("~/.transmogrifier.conf".expandTilde.exists)
    configFile.open("~/.transmogrifier.conf".expandTilde);
else
    configFile.open("/etc/transmogrifier.conf");
Run Code Online (Sandbox Code Playgroud)

请注意,使用2可能会导致程序中出现安全问题.例如,如果文件在程序检查文件是否存在时出现,但在尝试打开文件时消失,则程序可能会以意外的方式运行.如果使用2,请确保程序仍然以理想的方式运行,如果打开文件失败,即使您的程序刚检查该文件是否存在且可读.

  • 即使对其存在的检查成功,也无法保证您可以打开该文件,因为您可能没有权限读取它,或者在打开它之前可能会被其他进程删除.所以,你必须为异常做好准备.只是首先检查避免在许多情况下抛出异常. (2认同)