在vb.net中将文件创建到另一个位置

时间:2020-07-24 07:53:55

标签: vb.net ms-word vsto

我通过VSTO VB.NET为MS Word创建了一个插件 我编写了将该函数从“资源”复制到AppData文件夹的功能。 该代码可以正常工作并复制文件,但是可以在MyDocumnet和我的doc文件位置中创建其他文件(文件大小为0)。 我该如何解决?

Public Function openFile(fName As String) As String
    Dim path, fileName As String
    Dim bytes, p
    ' Dim FileLocked As Boolean
    p = Environment.GetEnvironmentVariable("APPDATA") & "\"

    Select Case fName
        Case "q"
            bytes = My.Resources.qText
            fileName = "qText.docx"
            path = p & fileName  
        Case "t"
            bytes = My.Resources.tText
            fileName = "tText.docx"
            path = p & fileName
           
    End Select

    Dim Locked As Boolean = False
    Try
        Dim fs As FileStream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)
        fs.Close()
    Catch
        Locked = True
    End Try
    Try
        If Locked Then
            Return fileName
        Else
            File.WriteAllBytes(path, bytes)
            If fileName = "QText.docx" Then
                SourceApp.Documents.Open(FileName:=path, ReadOnly:=True, Visible:=False)
            Else
                SourceApp.Documents.Open(FileName:=path, Visible:=False)
                SourceApp.Documents("tText.docx").Content.Delete()
            End If
            SourceApp.ScreenUpdating = False
            SourceApp.DisplayStatusBar = False
            Call ComMode()
            Return fileName
        End If
    Catch ex As Exception
    End Try
End Function

2 个答案:

答案 0 :(得分:1)

不是吗:

Dim fs As FileStream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)

实际上是这样:

Dim fs As FileStream = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)

就目前而言,您仅指定文件名而不是文件路径,因此必须假定文件夹路径为默认值,大概是您看到的那些文件所在的位置。

这是说明性变量名称为何如此重要的一个示例。就个人而言,我会使用folderPathfileNamefilePath,而不是pfileNamepath。显然每个人都是什么。

无论如何创建文件有什么意义?为什么不先检查是否存在一个,然后再尝试打开(如果存在)?您似乎正在检查文件是否已锁定,但是如果文件不存在,显然无法锁定。

答案 1 :(得分:1)

当您检查磁盘上是否存在/锁定了特定文件时,将使用相对路径。仅传递文件名,这表示相对路径:

Dim fs As FileStream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)
        fs.Close()

但是当您编写内容时,在代码中指定了绝对路径:

File.WriteAllBytes(path, bytes)

路径可以指向另一个地方。我建议使用Directory.GetCurrentDirectory方法来获取应用程序的当前工作目录。如果需要,您可以使用Environment.CurrentDirectory属性设置当前目录,以设置当前工作目录的标准路径。

相关问题