Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 检测是否可以在方案中打开文件_File_Io_Scheme_Mit Scheme - Fatal编程技术网

File 检测是否可以在方案中打开文件

File 检测是否可以在方案中打开文件,file,io,scheme,mit-scheme,File,Io,Scheme,Mit Scheme,我目前正在从事一个项目,我正在逐行读取文件中的内容。在执行此操作之前,我想检查文件是否可以打开或存在。类似于检查C++中的Fund()的返回内容,但在Stuttual.< /P> 到目前为止,我已经: (define (perform action fileName . args) (if (file-exists? fileName) ((define in-file (open-input-file fileName)) (do ((line (re

我目前正在从事一个项目,我正在逐行读取文件中的内容。在执行此操作之前,我想检查文件是否可以打开或存在。类似于检查C++中的Fund()的返回内容,但在Stuttual.< /P> 到目前为止,我已经:

(define (perform action fileName . args) 
    (if (file-exists? fileName)
        ((define in-file (open-input-file fileName))
        (do ((line (read-line in-file) (read-line in-file))) ((eof-object? line))
            (display line)
            (newline)))

        (map display
            (list "Unable to open " fileName " for reading\n"))
    ) 
)
但是,所有这些代码都会在文件中逐行读取,并尝试检查文件是否存在。但是它不起作用,因为我得到了一个“不能在空语法环境中绑定名称:在文件#[reserved name item 13]中”错误

我意识到当文件无法打开时,一个类型为条件类型的错误:文件操作错误根据发出信号;但是,我无法找出如何处理此异常,因此我的解决方法是


任何帮助都将不胜感激。

您对代码有一个问题。不能在代码中随机添加括号,以便为
if
生成单个表达式,因为括号是函数调用。要生成单个表达式,需要使用“开始”:

(定义(执行操作文件名.args)
(如果(文件存在?文件名)
(开始
(在文件中定义(打开输入文件名))
(do((行(文件中的读取行)(文件中的读取行))((eof对象?行))
(显示行)
(新行)))
(地图显示)
(列出“无法打开”文件名进行读取\n)
)
)

您也可以简单地使用
(如果(文件存在?文件名)…)
这里有一些示例:
((在文件中定义(打开输入文件文件名))
,并且,您只能将
define
放在顶层或主体顶部。在开始尝试I/O操作之前,您需要了解Scheme的基本知识。使用
let
绑定局部变量,而不是
define