2011-05-26 131 views
2

產生亂碼名文件我排除問題在那裏,當我發現的CreateFile()沒有很好地與文件名參數工作的CreateFile無法打開現有的命名管道。我的代碼是:VB6:的CreateFile()在當前工作目錄

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileW" (_ 
ByVal lpFileName As String, _ 
ByVal dwDesiredAccess As Long, _ 
ByVal dwShareMode As Long, _ 
ByVal lpSecurityAttributes As Long, _ 
ByVal dwCreationDisposition As Long, _ 
ByVal dwFlagsAndAttributes As Long, _ 
ByVal hTemplateFile As Long) As Long 

pipeHandle = CreateFile("C:\\test.txt", GENERIC_READ Or GENERIC_WRITE, 0&, 0&, CREATE_ALWAYS, 0&, 0&) 

它不會在C上創建文件:\,相反,它會在當前工作VB目錄中的文件,以亂碼文件名。看來CreateFile無法識別並解析給定的文件名字符串。

這是怎麼發生的?我在Windows 7上使用VB6(使用一些技巧來安裝它)。這可能會導致問題嗎?

+1

爲什麼是兩個\\?這很可能是你的問題源於此。您不能複製/粘貼示例,您需要知道發生了什麼。例如,\ \不會在VB6中轉義,儘管它在許多花括號語言中。 – Bob77 2011-05-26 02:21:04

+0

\ \確實是問題之一。我不知道VB6沒有逃脫\,這就是爲什麼我在思考「\\。\ pipe \ testpipe」的正確性。現在主要的問題被證明是unicode/ansi。我試過CreateFileA,它工作。感謝您的信息。 – Charlie 2011-05-26 02:53:26

+1

@Charlie :如果答案幫助了你,不要忘了接受它的答案,也許給予好評! (您的個人資料說,你還沒有問,儘管9個問題upvoted一個答案) – 2011-05-26 03:05:37

回答

4

這是一個很長一段時間,但我認爲這是一個ANSI/Unicode的事情。試試CreateFileA函數,看看會發生什麼。 (此外,IIRC,你不要逃避\ ....雖然再次它已經約7年,因爲我認真地VB6編碼。)的文件名

+0

非常感謝@MJB。 CreateFileA工作。現在我知道盡管VB6 String是unicode,但它在傳遞參數時將字符串轉換爲ANSI。 – Charlie 2011-05-26 02:55:56

+0

現在,注意有一種方式來獲得CreateFileW工作....我記得這樣做,也許別人會跳in.If ANSI是爲您的應用程序不夠好,不過,太好了。 – MJB 2011-05-26 04:09:29

+2

注意:我查了一下,如果filename被聲明爲long,並且你傳遞了StrPtr(yourStringFilename)作爲該參數,CreateFileW也可以工作。 – MJB 2011-05-26 06:56:18