Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net VB将文件从USB复制到FTP,无需整个根目录_Vb.net_File_Ftp_Copy_Usb - Fatal编程技术网

Vb.net VB将文件从USB复制到FTP,无需整个根目录

Vb.net VB将文件从USB复制到FTP,无需整个根目录,vb.net,file,ftp,copy,usb,Vb.net,File,Ftp,Copy,Usb,请有人能帮我一个项目,我们正在工作。 我们使用HMI将数据记录到直接连接到HMI的USB驱动器。我们的客户需要通过FTP访问这些文件。HMI有一个可以访问的FTP区域,但是没有在不同位置之间复制这些文件夹的直接方法。 我可以在后台运行一些VB脚本,并从PLC触发子程序 我对VB脚本一无所知,我正努力让它正常工作 此代码仅在包含日期时有效:IO.DirectoryInfo(“\UsbDisk\Data Logging\Log Files\DataSet0\yyyymmdd”) 每晚午夜都会创建一个

请有人能帮我一个项目,我们正在工作。 我们使用HMI将数据记录到直接连接到HMI的USB驱动器。我们的客户需要通过FTP访问这些文件。HMI有一个可以访问的FTP区域,但是没有在不同位置之间复制这些文件夹的直接方法。 我可以在后台运行一些VB脚本,并从PLC触发子程序

我对VB脚本一无所知,我正努力让它正常工作

此代码仅在包含日期时有效:
IO.DirectoryInfo(“\UsbDisk\Data Logging\Log Files\DataSet0\yyyymmdd”)

每晚午夜都会创建一个带有新日期的新文件夹,因此固定日期只适用于当天。理想情况下,我希望副本复制“UsbDisk\Data Logging\Log Files”中的所有内容,忽略“DataSet0\yyyymmdd”

提前谢谢

Sub Test
    Dim di As New IO.DirectoryInfo("\UsbDisk\Data Logging\Log Files\DataSet0\20191126")
    Dim Diar1 As IO.FileInfo() = di.GetFiles()
    Dim dra As IO.FileInfo

    For Each dra In Diar1
        System.IO.File.Copy(dra.FullName, "\User\SysmacHMI\FTP\" + dra.Name,True)

    Next
End Sub
您编写“VB脚本”,但显示VB.NET程序中的代码,因此我将使用后者。()

可以迭代所有子目录并从中获取文件,对中显示的代码稍加修改(实际上没有使用递归方法)就足够了

例如,这是一个完整的VB.NET控制台应用程序,它使用:

Option Infer On
Option Strict On

Imports System.IO

Module Module1

    ''' <summary>
    ''' Get the full filenames of the files in the given directory and its subdirectories.
    ''' Errors are ignored.
    ''' </summary>
    ''' <param name="path">Initial directory.</param>
    ''' <returns>A List(Of String) of the full filenames.</returns>
    Public Function GetAllFiles(ByVal path As String) As List(Of String)
        ' Adapted from https://stackoverflow.com/questions/44103640/recursive-file-search-in-vb-net

        Dim files As New List(Of String)
        Dim dirs As New Stack(Of String)
        dirs.Push(path)

        Do While (dirs.Count > 0)
            Dim currentDir = dirs.Pop()
            Try
                files.AddRange(Directory.EnumerateFiles(currentDir))

                For Each d In Directory.EnumerateDirectories(currentDir)
                    dirs.Push(d)
                Next

            Catch ex As Exception
                ' Could have been a permissions problem. Ignore it.
            End Try

        Loop

        Return files

    End Function

    Sub Test()
        'TODO: Make sure these are the correct absolute paths:
        Dim rootDir = "\UsbDisk\Data Logging\Log Files"
        Dim destDir = "\User\SysmacHMI\FTP"

        Dim allTheFiles = GetAllFiles(rootDir)

        For Each f In allTheFiles
            Dim newName = Path.Combine(destDir, Path.GetFileName(f))
            Console.WriteLine("Copy " & f & " to " & newName)
            ' Uncomment the File.Copy line to make it actually do the copy.
            ' File.Copy(f, newName, True)
        Next

    End Sub

    Sub Main()
        Test()

        Console.ReadLine()

    End Sub

End Module
选项推断打开
选项严格限制在
导入System.IO
模块1
''' 
''获取给定目录及其子目录中文件的完整文件名。
''错误被忽略。
''' 
''初始目录。
''完整文件名的列表(字符串)。
公共函数GetAllFiles(ByVal路径作为字符串)作为列表(字符串)
"改编自https://stackoverflow.com/questions/44103640/recursive-file-search-in-vb-net
将文件变暗为新列表(字符串)
Dim dirs作为新堆栈(字符串)
直接推力(路径)
执行时(dirs.Count>0)
Dim currentDir=dirs.Pop()
尝试
files.AddRange(Directory.EnumerateFiles(currentDir))
对于目录中的每个目录。枚举目录(currentDir)
直接推力(d)
下一个
特例
'可能是权限问题。别理它。
结束尝试
环
返回文件
端函数
子测试()
'TODO:确保这些是正确的绝对路径:
Dim rootDir=“\UsbDisk\Data Logging\Log Files”
Dim destDir=“\User\SysmacHMI\FTP”
Dim allTheFiles=GetAllFiles(rootDir)
对于所有文件中的每个f
Dim newName=Path.Combine(destDir,Path.GetFileName(f))
Console.WriteLine(“复制”&f&“到”&newName)
'取消对File.Copy行的注释,使其实际执行复制。
'File.Copy(f,newName,True)
下一个
端接头
副标题()
测试()
Console.ReadLine()
端接头
端模块

如果它抱怨
EnumerateFiles
EnumerateDirectories
,则使用
GetFiles
GetDirectories

检查我的理解,是否要将“DataSet0”目录下找到的每个文件复制到“\User\SysmacHMI\FTP\”中?或者“数据集0”中的“0”也可以更改吗?我想您希望
Dim di作为新的IO.DirectoryInfo(“\UsbDisk\Data Logging\Log Files”)
Dim Diar1作为IO.FileInfo()=di.GetFiles(“*”,SearchOption.AllDirectories)
。谢谢您的输入。我不确定这是否是由于HMI上运行的脚本造成的,但是SearchOption.AllDirectories没有编译。Dim Diar1作为IO.FileInfo()=di.GetFiles(“.”SearchOption.AllDirectories)您可以使用问题中的代码。顺便说一句,HMI代表什么?它使用的是哪个版本的.NET Framework?HMI(人机界面)我是一名控制工程师,只懂逻辑编程(梯形图逻辑/结构化文本)VB不是我必须使用的东西。直到现在:/我很感激你的链接,但对我来说没有任何意义。我也不知道如何找到使用了哪个版本的.NET Framework。