VB6:CreateFile()在当前工作目录中创建名称混乱的文件

VB6:CreateFile()在当前工作目录中创建名称混乱的文件,vb6,filenames,createfile,working-directory,Vb6,Filenames,Createfile,Working Directory,当我发现CreateFile()与filename参数不兼容时,我正在排除CreateFile无法打开现有命名管道的问题。我的代码是: Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileW" ( _ ByVal lpFileName As String, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ ByVal lpSecurit

当我发现CreateFile()与filename参数不兼容时,我正在排除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似乎无法识别和解析给定的文件名字符串


为什么会这样?我在Windows7上使用VB6(使用了一些技巧来安装它)。这可能是造成问题的原因吗?

已经很久了,但我认为这是ansi/unicode的问题。尝试
CreateFileA
函数,看看会发生什么。(同样,IIRC,您也无法逃避\……尽管我已经7年没有认真使用VB6编码了。)

为什么文件名中有两个\\?你的问题很可能就是因为这个。您不能只是复制/粘贴示例,您需要知道发生了什么。例如,在VB6中,尽管在许多大括号语言中,但\没有转义。\\n这确实是问题之一。我不知道VB6不会逃逸\,这就是为什么我在思考“\\.\pipe\testpipe”的正确性。现在主要的问题是unicode/ansi。我试过CreateFileA,它成功了。谢谢你提供的信息。@Charlie:如果一个答案对你有帮助,别忘了接受它作为答案,也许可以投票!(你的个人资料显示,尽管你问了9个问题,但你没有对一个答案投过赞成票)@Mitch,我一直想投票通知问题已经解决,并感谢你的帮助,但它总是说我需要15的声誉才能投票。这就是为什么我不能。@Charlie:np。我对这个问题投了更高的票,所以你的答案有点接近了!非常感谢@MJB。CreateFileA工作正常。现在我知道虽然VB6字符串是unicode,但在传递参数时它会将字符串转换为ANSI。。。。我记得我做过,也许其他人也会加入。不过,如果ansi对你的应用程序来说足够好,那就太好了。注意:我查过了,如果文件名声明为long,并且你传递了StrPtr(你的StringFileName)作为参数,CreateFileW可能也能工作。