2010-10-06 109 views
4

我的一位用戶問我爲什麼我的應用程序不支持文件名中的分號。我通過我的代碼,似乎Windows函數GetOpenFileName截斷任何包含分號的文件名。例如「one; two.wav」 - >「one」。Windows冒號中的分號?

微軟表示,冒號是不允許的,但不要提及分號...

http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx

他們是合法還是非法?

編輯:..and如何GetOpenFileName()使用文件名中的分號?

OH !,奇怪 - 文件名是正確的,除了'滾動'在左邊。所以「one; two.wav」看起來像「two.wav」,直到我點擊它並按左箭頭(然後很好)。所以這不是一個錯誤,只是奇怪的行爲。

+0

...如果是這樣,我如何讓GetOpenFileName接受它們? – Jeff 2010-10-06 05:06:48

+0

嘗試引用分隔文件名,看看是否有效(在*路徑字符串中添加引號*):'「one; two.wav」' – 2010-10-06 05:08:54

+0

乾杯,似乎沒有工作,GetOpenFileName()返回錯誤代碼,沒有對話框顯示。 – Jeff 2010-10-06 05:14:31

回答

8

Semicolons are legal in NTFS file paths

使用任何字符在當前代碼頁的名稱,包括在擴展的字符集(128-255)的Unicode字符和字符,除了以下:

以下保留字符:

  • <(小於)
  • (大於)

  • :(冒號)
  • 「(雙引號)
  • /(正斜槓)
  • \(反斜槓)
  • | (豎條或管道)
  • ? (問號)
  • (星號)
  • 整數值零,有時被稱爲ASCII NUL字符。
  • 整數表示範圍從1到31的字符,但允許這些字符的交替流除外。
  • 目標文件系統不允許的任何其他字符。

我能夠分號添加到文件名我的Win7系統上。注意代碼,可能是你的或第三方代碼,它會對意外字符(最顯着的是空格)做奇怪的事情。

+0

實際上,冒號(':')是爲NTFS備用數據流保留的。因此,您可以在命令窗口中執行此操作:'echo NUL> foo',然後'echo hello> foo:bar'。 – Benoit 2010-10-06 09:00:36

+1

@Benoit:但邁克爾沒有另外說明? – 2012-03-26 10:05:22

1

是的,他們是被允許的。只是,如果你在命令行中運行它們,你必須在其中加入引號。

1

是的。分號是Windows文件名中的合法字符。但是,如果有其他程序對他們有問題,那也不會讓我感到驚訝。

2

True:Windows允許在文件名中使用分號。但是,當您將這些文件刻錄到數據CD或DVD光盤時,名稱會被截斷。我在使用頭戴式Nero 9版本時遇到過這種情況。

4

雖然在Windows手冊中可能會省略,但分號也是一個保留字符,例如「dir .dat; .bak」是一個合法的命令。這同樣適用於加號字符,例如「copy test1.dat + test2.dat test3.dat」是一個合法的命令。