Io outputSubstr()不写入任何内容
我有一个很烦人的问题 此功能:Io outputSubstr()不写入任何内容,io,sml,smlnj,Io,Sml,Smlnj,我有一个很烦人的问题 此功能: fun writeAFile() = let val outstream = TextIO.openOut "look_at_me_im_a_file.txt" in TextIO.outputSubstr(outstream,Substring.full("I'm so sad right now :(")) end; 只需创建文件look\u at\u me\u im\u a\u file.txt,但它是空的。 我没有得到任何错误
fun writeAFile() =
let
val outstream = TextIO.openOut "look_at_me_im_a_file.txt"
in
TextIO.outputSubstr(outstream,Substring.full("I'm so sad right now :("))
end;
只需创建文件look\u at\u me\u im\u a\u file.txt
,但它是空的。
我没有得到任何错误,它不能与SML/NJ或PolyML一起工作。
我阅读文件没有问题。作为新手,我没有检查我们的课堂讲稿:/ 代码的功能版本是
fun writeAFile() =
let
val outstream = TextIO.openOut "look_at_me_im_a_file.txt"
in
(
TextIO.output(outstream,"I'm so glad right now :)");
TextIO.closeOut(outstream)
)
end;
尽管值得注意的是,上的在线文档仅对输出功能给出了模糊的参考
查看命令式IO
的文档,会发现val输出:outstream*vector->unit
,这令人困惑,因为string
实际上是CharVector.vector
类型,因此是output
函数的有效参数
我希望这将对其他新手有所帮助。首先,子字符串。不需要完整的,它除了给你一些子字符串类型的东西之外,没有其他作用。相反,您可以执行以下操作:
TextIO.output (outstream, "I'm so sad right now :(");
现在,它不起作用的原因是:
当您告诉sml将某些内容写入文件时(使用TextIO.output
或TextIO.outputSubstr
),sml实际上不会立即将其写入文件。它写入缓冲区。嗯,有时它会立即写入文件,但频率不够,您无法依赖它
现在,这看起来非常不切实际,但效率更高——如果你让它一个接一个地写几小段数据,它就可以在一次写操作中将这些数据全部写在一起
解决这个问题的方法是告诉sml“嘿,我真的希望现在就写。”有一个函数专门用于此,名为TextIO.flushOut
。或者,关闭流也会导致写入所有内容
实际上,您应该始终记住关闭您的流。留下打开的文件句柄是很混乱的——文件系统如何知道您已经完成了它,并且它可以让其他程序写入该文件