拒绝访问 VB.NET 中的文件夹

Access Denied to Folder in VB.NET

我正在尝试从 ftp 下载 .csv 文件,然后将下载文件中的数据导入 sql table。但是它给我错误 "Access denied to the path",但是当我不使用代码访问它时,我可以看到文件,而且文件没有从 ftp.

下载
Imports System.Net
Imports System.Text
Imports System.IO
Imports System.Data.OleDb
Imports System.Data.SqlClient



Public Class Form1

Sub Get_File_From_FTP()

    Try

        Dim RFN = "ftp://someaddress.com/Test.csv"
        Dim LFN = "C:\Sample\IncomingFiles\"
        Dim FTP As FtpWebRequest = CType(FtpWebRequest.Create(RFN), FtpWebRequest)
        FTP.Credentials = New NetworkCredential("ftpdatasandyalexander", "Y$m0z1k30")
        FTP.KeepAlive = False
        FTP.UseBinary = True
        FTP.Method = WebRequestMethods.Ftp.DownloadFile
        Using FtpResponse As FtpWebResponse = CType(FTP.GetResponse, FtpWebResponse)
            Using ResponseStream As IO.Stream = FtpResponse.GetResponseStream

                Using fs As New IO.FileStream(LFN, FileMode.Create)
                    Dim buffer(2047) As Byte
                    Dim read As Integer = 0
                    Do
                        read = ResponseStream.Read(buffer, 0, buffer.Length)
                        fs.Write(buffer, 0, read)
                    Loop Until read = 0
                    ResponseStream.Close()
                    fs.Flush()
                    fs.Close()
                    'Log("")
                End Using
                ResponseStream.Close()
                MessageBox.Show("File Downloaded!")

            End Using
        End Using

    Catch ex As Exception
        MessageBox.Show(ex.Message)

    End Try
End Sub

Sub Import_File_To_SQL()
    Dim ExcelConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Sample\IncomingFiles\Test.csv;Extended Properties=""text;HDR=Yes;FMT=Delimited(;)"";Persist Security Info=False")
    ExcelConnection.Open()

    Dim expr As String = "Select * From [sheet$]"

    Dim objCmdSelect As OleDbCommand = New OleDbCommand(expr, ExcelConnection)
    Dim objDR As OleDbDataReader

    Dim SQLconn As New SqlConnection()
    Dim ConnString As String = "Data Source=MMSQL1;Initial Catalog=dbname; User Id=user; Password=pass;"
    SQLconn.ConnectionString = ConnString
    SQLconn.Open()


    Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLconn)
        bulkCopy.DestinationTableName = "tDHL_SortCode"

        Try
            objDR = objCmdSelect.ExecuteReader
            bulkCopy.WriteToServer(objDR)
            objDR.Close()
            SQLconn.Close()
            MessageBox.Show("File Imported!")

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Using
End Sub

Private Sub btndownload_Click(sender As Object, e As EventArgs) Handles btndownload.Click
    Call Get_File_From_FTP()
    Call Import_File_To_SQL()
End Sub

结束Class

您试图在不提供文件名的情况下将文件下载到目录中。问题在于此处的代码:

Dim LFN = "C:\Sample\IncomingFiles\"

应该是文件路径,不是目录路径。

尝试

Dim LFN = "C:\Sample\IncomingFiles\Test.csv"

这是我为解决问题而编写的代码

Imports System.Net
Imports System.Text
Imports System.IO
Imports System.Data.OleDb
Imports System.Data.SqlClient



Public Class Form1

Sub Get_File_From_FTP()

    Dim buffer(1023) As Byte ' 
    Dim bytesIn As Integer ' 
    Dim totalBytesIn As Integer '
    Dim output As IO.Stream '
    Try
        Dim FTPRequest As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ftp://something.com/Sort_Codes/" & "sample.csv"), System.Net.FtpWebRequest)
        FTPRequest.Credentials = New System.Net.NetworkCredential("user", "pass")
        FTPRequest.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
        Dim stream As System.IO.Stream = FTPRequest.GetResponse.GetResponseStream
        output = System.IO.File.Create("C:\Test\IncomingFiles\Test.csv")
        bytesIn = 1
        Do Until bytesIn < 1
            bytesIn = stream.Read(buffer, 0, 1024)
            If bytesIn > 0 Then
                output.Write(buffer, 0, bytesIn)
                totalBytesIn += bytesIn
                Label2.Text = totalBytesIn.ToString + " Bytes Downloaded"
                Application.DoEvents()
            End If
        Loop
        output.Close()
        stream.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub


Sub Import_File_To_SQL()
    Dim ExcelConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & "C:\Test\IncomingFiles" & ";" & _
        "Extended Properties=""Text;HDR=YES;IMEX=1;""")
    ExcelConnection.Open()

    Dim expr As String = "Select * From [Test.csv]"

    Dim objCmdSelect As OleDbCommand = New OleDbCommand(expr, ExcelConnection)
    Dim objDR As OleDbDataReader

    Dim SQLconn As New SqlConnection()
    Dim ConnString As String = "Data Source=server;Initial Catalog=dbname; User Id=user; Password=pass;"
    SQLconn.ConnectionString = ConnString
    SQLconn.Open()


    Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLconn)
        bulkCopy.DestinationTableName = "tDHL_SortCode"

        Try
            objDR = objCmdSelect.ExecuteReader
            bulkCopy.WriteToServer(objDR)
            objDR.Close()
            SQLconn.Close()
            MessageBox.Show("File Imported!")

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Using
End Sub

Private Sub btndownload_Click(sender As Object, e As EventArgs) Handles btndownload.Click
    Call Get_File_From_FTP()
    Call Import_File_To_SQL()
End Sub

结束Class