2014-04-25 50 views
0

在TCL文件這樣看來,代碼應工作...在Windows上創建

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(真),而文件不存在任何。混亂。

回答

3

該文件可能已創建,不在C:的根目錄中,而是在當前目錄中。您會發現,Tcl解釋器在雙引號字符串中處理反斜槓的方式是將其轉換爲特殊字符(例如\t,將其轉換爲製表符,並將\n轉換爲換行符)。當解釋器查找字符串"C:\Test2.txt"時,它會找到組合\T,它不是有效的轉義碼,因此它將字符串評估爲"C:Test2.txt",這是Windows中的合法文件名,意思是Test2.txt位於C: 。

解決方法是在文件名中使用Unix樣式的正斜槓,例如"C:/Test2.txt"

+2

+1。或者,使用雙反斜槓'「C:\\ Test2.txt」'或將大括號「{C:\ Test2.txt}'放在一起。檢查文件名是預期的一種好方法是執行'puts $ file_name' ... –