在windows上的TCL中创建文件

在windows上的TCL中创建文件,tcl,Tcl,看起来这个代码应该可以用 set data "sample text" set file_name "C:\Test2.txt" set file_obj [open $file_name w] puts -nonewline $file_obj $data close $file_obj 但在我的两个系统上都没有创建任何文件 set file_name "C:\Test2.txt" file exists $file_name 当文件不存在时返回为1(true)。令人困惑。文件可能不是在C

看起来这个代码应该可以用

set data "sample text"
set file_name "C:\Test2.txt"
set file_obj [open $file_name w]
puts -nonewline $file_obj $data
close $file_obj
但在我的两个系统上都没有创建任何文件

set file_name "C:\Test2.txt"
file exists $file_name

当文件不存在时返回为1(true)。令人困惑。

文件可能不是在C:的根目录中创建的,而是在当前目录中创建的。您可以看到,Tcl解释器处理双引号字符串中的反斜杠的方式是将其和下面的字符转换为特殊字符(例如,
\t
,转换为制表符,以及
\n
,转换为换行符)。当解释器查看字符串
“C:\Test2.txt”
时,它会找到组合
\T
,该组合不是有效的转义码,因此它将字符串计算为
“C:Test2.txt”
,这是Windows中的一个合法文件名,意味着
Test2.txt
,位于C:的当前目录中


解决方案是在文件名中使用Unix样式的常规斜杠,例如
“C:/Test2.txt”

文件可能不是在C:的根目录中创建的,而是在当前目录中创建的。您可以看到,Tcl解释器处理双引号字符串中的反斜杠的方式是将其和下面的字符转换为特殊字符(例如,
\t
,转换为制表符,以及
\n
,转换为换行符)。当解释器查看字符串
“C:\Test2.txt”
时,它会找到组合
\T
,该组合不是有效的转义码,因此它将字符串计算为
“C:Test2.txt”
,这是Windows中的一个合法文件名,意味着
Test2.txt
,位于C:的当前目录中


解决方案是在文件名中使用Unix样式的常规斜杠,例如
“C:/Test2.txt”

文件可能不是在C:的根目录中创建的,而是在当前目录中创建的。您可以看到,Tcl解释器处理双引号字符串中的反斜杠的方式是将其和下面的字符转换为特殊字符(例如,
\t
,转换为制表符,以及
\n
,转换为换行符)。当解释器查看字符串
“C:\Test2.txt”
时,它会找到组合
\T
,该组合不是有效的转义码,因此它将字符串计算为
“C:Test2.txt”
,这是Windows中的一个合法文件名,意味着
Test2.txt
,位于C:的当前目录中


解决方案是在文件名中使用Unix样式的常规斜杠,例如
“C:/Test2.txt”

文件可能不是在C:的根目录中创建的,而是在当前目录中创建的。您可以看到,Tcl解释器处理双引号字符串中的反斜杠的方式是将其和下面的字符转换为特殊字符(例如,
\t
,转换为制表符,以及
\n
,转换为换行符)。当解释器查看字符串
“C:\Test2.txt”
时,它会找到组合
\T
,该组合不是有效的转义码,因此它将字符串计算为
“C:Test2.txt”
,这是Windows中的一个合法文件名,意味着
Test2.txt
,位于C:的当前目录中


解决方案是在文件名中使用Unix样式的常规斜杠,例如
“C:/Test2.txt”

+1。或者,使用双反斜杠
“C:\\Test2.txt”
或放在大括号中
{C:\Test2.txt}
。检查文件名是否符合要求的一个好方法是执行以下操作:
put$file\u name
…+1。或者,使用双反斜杠
“C:\\Test2.txt”
或放在大括号中
{C:\Test2.txt}
。检查文件名是否符合要求的一个好方法是执行以下操作:
put$file\u name
…+1。或者,使用双反斜杠
“C:\\Test2.txt”
或放在大括号中
{C:\Test2.txt}
。检查文件名是否符合要求的一个好方法是执行以下操作:
put$file\u name
…+1。或者,使用双反斜杠
“C:\\Test2.txt”
或放在大括号中
{C:\Test2.txt}
。检查文件名是否符合要求的一个好方法是执行
put$file\u name