Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
.net 使用Ftpwebrequest将固定宽度的.PRN文件上载到大型机。每条记录被截断为80个字符_.net_Encoding_Upload_Ftpwebrequest - Fatal编程技术网

.net 使用Ftpwebrequest将固定宽度的.PRN文件上载到大型机。每条记录被截断为80个字符

.net 使用Ftpwebrequest将固定宽度的.PRN文件上载到大型机。每条记录被截断为80个字符,.net,encoding,upload,ftpwebrequest,.net,Encoding,Upload,Ftpwebrequest,我正在使用ftpwebrequest将一些文件上载到我们现有的旧大型机系统(MPE/IX) 该文件是一个.prn文件,基本上有许多固定宽度且没有分隔符的记录。每条记录长176个字符,末尾有一个CRLF 如果选择usebinary=false作为ASCII文件上载,则会在大型机上创建包含每条记录的文件,但每条行/记录会被截断为80个字符 如何将字符数指定为176 谢谢 这是我正在使用的代码,就像我说的,它将文件发送到大型机,然后向适当的人发送电子邮件 Public Sub Main()

我正在使用ftpwebrequest将一些文件上载到我们现有的旧大型机系统(MPE/IX)

该文件是一个.prn文件,基本上有许多固定宽度且没有分隔符的记录。每条记录长176个字符,末尾有一个CRLF

如果选择usebinary=false作为ASCII文件上载,则会在大型机上创建包含每条记录的文件,但每条行/记录会被截断为80个字符

如何将字符数指定为176

谢谢

这是我正在使用的代码,就像我说的,它将文件发送到大型机,然后向适当的人发送电子邮件

    Public Sub Main()
    Dim i As Integer = 1
    Dim credential As NetworkCredential

    Try
        EmailList = ReadEmailAddress()
        credential = New NetworkCredential("USERNAME", String.Empty)
        FileList.AddRange({"CAN04_30030_", "CAN04_34120_", "CSI01_30030_", "CSI01_34120_"})

        For Each FileName In FileList
            Dim File As FileInfo
            Dim Response As ArrayList

            Try
                File = New FileInfo(IO.Path.Combine(SourceFileFolder, FileName & Now.ToString("yyyyMMdd") & ".prn"))

                If File.Exists Then
                    Response = ftp.Upload(File, "ftp://SERVERNAME/FILENAME" & i, credential)
                    UploadResults.Add(Response(1))
                Else
                    UploadResults.Add("<font color=""red"">" & File.Name & " was not found in the folder " & SourceFileFolder & "</font>")
                End If

                If Not Response Is Nothing Then
                    If Response(0) = 226 Then ArchiveFile(File)
                End If

            Catch ex As Exception
                UploadResults.Add("<font color=""red"">" & ex.Message & " occurred while trying to upload the file " & File.Name & "</font>")
            Finally
                File = Nothing
                Response = Nothing
            End Try

            i += 1
        Next

        SendMail()
    Catch ex As Exception

    Finally
        credential = Nothing
    End Try


End Sub  


Public Function Upload(ByVal File As FileInfo, ByVal target As String, ByVal credential As NetworkCredential) As ArrayList
    Dim AList As New ArrayList

    Try
        request = DirectCast(WebRequest.Create(target), FtpWebRequest)

        With request
            .Method = WebRequestMethods.Ftp.UploadFile
            .UsePassive = True
            .Credentials = credential
            .KeepAlive = False
            .UseBinary = False
        End With

        Dim sourceStream As StreamReader = New StreamReader(File.FullName, True)
        Dim filecontents() As Byte = Encoding.ASCII.GetBytes(sourceStream.ReadToEnd)
        sourceStream.Close()
        request.ContentLength = filecontents.Length

        Dim stream As Stream = request.GetRequestStream
        stream.Write(filecontents, 0, filecontents.Length)
        stream.Flush()
        stream.Close()

        response = DirectCast(request.GetResponse, FtpWebResponse)

        Dim t() As String = Split(target, "/")

        Try
            AList.Add(response.StatusCode)
        Catch ex As Exception
            AList.Add(String.Empty)
        End Try


        If response.StatusCode = 226 Then
            AList.Add(File.Name & " (" & t(t.GetUpperBound(0)) & ") " & " was transferred to " & UCase(credential.UserName) & " [<i>" & Split(response.StatusDescription, ".")(0) & "</i>]")
        Else
            AList.Add(File.Name & " (" & t(t.GetUpperBound(0)) & ") " & " was NOT transferred to " & UCase(credential.UserName) & " [<i>" & Split(response.StatusDescription, ".")(0) & "</i>]")
        End If

    Catch ex As Exception
        AList.Add(File.Name & " was NOT transferred.  " & ex.Message.ToString)
    Finally
        response.Close()
        request = Nothing
        response = Nothing
        File = Nothing
    End Try
    Return AList
End Function
Public Sub-Main()
尺寸i为整数=1
Dim凭据作为网络凭据
尝试
EmailList=ReadEmailAddress()
凭证=新网络凭证(“用户名”,String.Empty)
AddRange({“CAN04_30030_”,“CAN04_34120_”,“CSI01_30030_”,“CSI01_34120_“})
对于文件列表中的每个文件名
将文件设置为FileInfo
作为ArrayList的暗淡响应
尝试
File=newfileinfo(IO.Path.Combine(SourceFileFolder、FileName和Now.ToString(“yyyyMMdd”)和“.prn”))
如果文件
Response=ftp.Upload(文件,“ftp://SERVERNAME/FILENAME“&i,凭证)
上传结果。添加(响应(1))
其他的
UploadResults.Add(“&File.Name&”未在文件夹“&SourceFileFolder&”中找到)
如果结束
如果没有回应,那就什么都不是了
如果响应(0)=226,则归档文件(File)
如果结束
特例
UploadResults.Add(“&ex.Message&”在尝试上载文件“&file.Name&”时出现)
最后
文件=无
响应=无
结束尝试
i+=1
下一个
SendMail()
特例
最后
凭证=无
结束尝试
端接头
作为ArrayList的公共函数上载(ByVal文件作为FileInfo,ByVal目标作为字符串,ByVal凭证作为NetworkCredential)
作为新ArrayList的Dim列表
尝试
request=DirectCast(WebRequest.Create(target),FtpWebRequest)
请求
.Method=WebRequestMethods.Ftp.UploadFile
.useAssive=True
.Credentials=凭证
.KeepAlive=False
.useBarbinary=False
以
Dim sourceStream As StreamReader=新StreamReader(File.FullName,True)
Dim filecontents()的形式为Byte=Encoding.ASCII.GetBytes(sourceStream.ReadToEnd)
sourceStream.Close()
request.ContentLength=filecontents.Length
Dim stream As stream=request.GetRequestStream
stream.Write(filecontents,0,filecontents.Length)
stream.Flush()
stream.Close()
response=DirectCast(request.GetResponse,FtpWebResponse)
Dim t()作为字符串=拆分(目标“/”)
尝试
列表添加(响应状态代码)
特例
AList.Add(String.Empty)
结束尝试
如果response.StatusCode=226,则
AList.Add(File.Name&“(&t(t.GetUpperBound(0))&“&”)已被传输到“&UCase(credential.UserName)&”[“&Split(response.StatusDescription)”(0)和“]”)
其他的
AList.Add(File.Name&“(&t(t.GetUpperBound(0))&“&”未传输到“&UCase(credential.UserName)&”[“&Split(response.StatusDescription)”(0)和“])”
如果结束
特例
AList.Add(File.Name&“未传输”。&ex.Message.ToString)
最后
答复:Close()
请求=无
响应=无
文件=无
结束尝试
返回列表
端函数

看起来您只需添加
;rec=-176
到文件名的末尾。试着这样做:

Response = ftp.Upload(File, "ftp://SERVERNAME/FILENAME" & i & ";rec=-176", credential)

我认为您需要回答的第一个问题是如何仅使用命令行FTP执行此操作。然后找出如何将这些命令转换为.NET操作。我们正在上传到一个MPE/IX系统,我相信这是一个HP大型机系统。我们用于该系统的命令是:put 30030_20110713.prn PTEST;rec=-176,有效。我猜在幕后它真的发出了put命令。谢谢你的帮助,加布,你为我节省了很多时间:)