PB.Ex FTP (Windows)

Applications, Games, Tools, User libs and useful stuff coded in PureBasic
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

PB.Ex FTP (Windows)

Post by RSBasic »

Hello,

PureBasic can neither SFTP (SSH File Transfer Protocol) nor FTPS (FTP over SSL/TLS). With this library this is possible. The functions are built in the same style as the FTP library of PureBasic and FTP is also supported.

Functions:
  • OpenFTPEx()
    • Syntax:

      Code: Select all

      Result = OpenFTPEx(ID, Protocol, ServerName$, Port, User$, Password$, Charset, @ErrorOutput)
    • Description: Establishes a connection to the server.
    • Parameter:
      1. ID: A unique number for the connection. PB_Any can be used to generate the number automatically.
      2. Protocol: Sets the protocol (FTP, SFTP, FTPS) for the connection: #PBEx_FTP_Protocol_FTP, #PBEx_FTP_Protocol_SFTP, #PBEx_FTP_Protocol_FTPS_Implicit, #PBEx_FTP_Protocol_FTPS_Explicit
      3. ServerName$: The domain or IP address of the server.
      4. Port: The port number for the connection.
      5. User$: The user name for logging in.
      6. Password$: The password for logging in.
      7. Charset: Specifies the character set: #PB_UTF8, #PB_Ascii, #PB_Unicode - SFTP uses UTF-8 by default.
      8. @ErrorOutput: If an error occurred, the error message is stored in the variable. This variable must be reserved with 128 characters before passing. Maximum length of the return is 128 characters including the NULL character. If no error description is to be returned for an error, 0 can be passed instead.
    • Return value:
      • 1: The process was successful. If #PB_Any is used, the ID is returned.
    • Example:

      Code: Select all

      EnableExplicit
      
      Global PBEx_FTP
      
      #PBEx_FTP_Version$ = "1.0.6.0"
      #PBEx_FTP_Protocol_FTP = 1
      #PBEx_FTP_Protocol_SFTP = 2
      #PBEx_FTP_Protocol_FTPS_Implicit = 3
      #PBEx_FTP_Protocol_FTPS_Explicit = 4
      
      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_FTP = OpenLibrary(#PB_Any, "PB.Ex_FTP_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_FTP = OpenLibrary(#PB_Any, "PB.Ex_FTP_x64.dll")
      CompilerEndIf
      
      If PBEx_FTP
        Prototype OpenFTPEx(ID, Protocol, ServerName.p-Unicode, Port, User.p-Unicode, Password.p-Unicode, Charset, ErrorOutput)
        Global OpenFTPEx.OpenFTPEx = GetFunction(PBEx_FTP, "OpenFTPEx")
        Prototype CloseFTPEx(ID, ErrorOutput)
        Global CloseFTPEx.CloseFTPEx = GetFunction(PBEx_FTP, "CloseFTPEx")
        Prototype CheckFTPConnectionEx(ID, ErrorOutput)
        Global CheckFTPConnectionEx.CheckFTPConnectionEx = GetFunction(PBEx_FTP, "CheckFTPConnectionEx")
        Prototype IsFTPEx(ID, ErrorOutput)
        Global IsFTPEx.IsFTPEx = GetFunction(PBEx_FTP, "IsFTPEx")
        Prototype ExamineFTPDirectoryEx(ID, ErrorOutput)
        Global ExamineFTPDirectoryEx.ExamineFTPDirectoryEx = GetFunction(PBEx_FTP, "ExamineFTPDirectoryEx")
        Prototype FinishFTPDirectoryEx(ID, ErrorOutput)
        Global FinishFTPDirectoryEx.FinishFTPDirectoryEx = GetFunction(PBEx_FTP, "FinishFTPDirectoryEx")
        Prototype NextFTPDirectoryEntryEx(ID, ErrorOutput)
        Global NextFTPDirectoryEntryEx.NextFTPDirectoryEntryEx = GetFunction(PBEx_FTP, "NextFTPDirectoryEntryEx")
        Prototype FTPDirectoryEntryNameEx(ID, Output, ErrorOutput)
        Global FTPDirectoryEntryNameEx.FTPDirectoryEntryNameEx = GetFunction(PBEx_FTP, "FTPDirectoryEntryNameEx")
        Prototype.q FTPDirectoryEntrySizeEx(ID, ErrorOutput)
        Global FTPDirectoryEntrySizeEx.FTPDirectoryEntrySizeEx = GetFunction(PBEx_FTP, "FTPDirectoryEntrySizeEx")
        Prototype FTPDirectoryEntryTypeEx(ID, ErrorOutput)
        Global FTPDirectoryEntryTypeEx.FTPDirectoryEntryTypeEx = GetFunction(PBEx_FTP, "FTPDirectoryEntryTypeEx")
        Prototype FTPDirectoryEntryDateEx(ID, ErrorOutput)
        Global FTPDirectoryEntryDateEx.FTPDirectoryEntryDateEx = GetFunction(PBEx_FTP, "FTPDirectoryEntryDateEx")
        Prototype FTPDirectoryEntryAttributesEx(ID, ErrorOutput)
        Global FTPDirectoryEntryAttributesEx.FTPDirectoryEntryAttributesEx = GetFunction(PBEx_FTP, "FTPDirectoryEntryAttributesEx")
        Prototype GetFTPDirectoryEx(ID, Output, ErrorOutput)
        Global GetFTPDirectoryEx.GetFTPDirectoryEx = GetFunction(PBEx_FTP, "GetFTPDirectoryEx")
        Prototype SetFTPDirectoryEx(ID, DirectoryName.p-Unicode, ErrorOutput)
        Global SetFTPDirectoryEx.SetFTPDirectoryEx = GetFunction(PBEx_FTP, "SetFTPDirectoryEx")
        Prototype CreateFTPDirectoryEx(ID, DirectoryName.p-Unicode, ErrorOutput)
        Global CreateFTPDirectoryEx.CreateFTPDirectoryEx = GetFunction(PBEx_FTP, "CreateFTPDirectoryEx")
        Prototype DeleteFTPDirectoryEx(ID, DirectoryName.p-Unicode, ErrorOutput)
        Global DeleteFTPDirectoryEx.DeleteFTPDirectoryEx = GetFunction(PBEx_FTP, "DeleteFTPDirectoryEx")
        Prototype DeleteFTPFileEx(ID, FileName.p-Unicode, ErrorOutput)
        Global DeleteFTPFileEx.DeleteFTPFileEx = GetFunction(PBEx_FTP, "DeleteFTPFileEx")
        Prototype RenameFTPFileEx(ID, FileName.p-Unicode, NewFileName.p-Unicode, ErrorOutput)
        Global RenameFTPFileEx.RenameFTPFileEx = GetFunction(PBEx_FTP, "RenameFTPFileEx")
        Prototype ReceiveFTPFileEx(ID, RemoteFileName.p-Unicode, FileName.p-Unicode, IsAsynchron,  ErrorOutput)
        Global ReceiveFTPFileEx.ReceiveFTPFileEx = GetFunction(PBEx_FTP, "ReceiveFTPFileEx")
        Prototype SendFTPFileEx(ID, FileName.p-Unicode, RemoteFileName.p-Unicode, IsAsynchron, ErrorOutput)
        Global SendFTPFileEx.SendFTPFileEx = GetFunction(PBEx_FTP, "SendFTPFileEx")
        Prototype FTPProgressEx(ID, PercentValue, TransferRate, EstimatedTime, ErrorOutput)
        Global FTPProgressEx.FTPProgressEx = GetFunction(PBEx_FTP, "FTPProgressEx")
        Prototype AbortFTPFileEx(ID, ErrorOutput)
        Global AbortFTPFileEx.AbortFTPFileEx = GetFunction(PBEx_FTP, "AbortFTPFileEx")
        
      EndIf
      
      Define ErrorOutput$ = Space(128)
      Define FileName$ = Space(#MAX_PATH)
      
      Debug "SFTP..."
      
      If OpenFTPEx(1, #PBEx_FTP_Protocol_SFTP, "test.rebex.net", 22, "demo", "password", #PB_UTF8, @ErrorOutput$)
        ;If OpenFTPEx(1, #PBEx_FTP_Protocol_SFTP, "demo.wftpserver.com", 2222, "demo-user", "demo-user", #PB_UTF8, @ErrorOutput$)
        SetFTPDirectoryEx(1, "pub", @ErrorOutput$)
        SetFTPDirectoryEx(1, "example", @ErrorOutput$)
        ;SetFTPDirectoryEx(1, "download", @ErrorOutput$)
        ;SetFTPDirectoryEx(1, "upload", @ErrorOutput$)
        
        If ExamineFTPDirectoryEx(1, @ErrorOutput$)
          While NextFTPDirectoryEntryEx(1, @ErrorOutput$)
            FTPDirectoryEntryNameEx(1, @FileName$, @ErrorOutput$)
            Debug FileName$
          Wend
          
        EndIf
        
      ;   Define a
      ;   Define PercentValue = 0
      ;   Define TransferRate = 0
      ;   Define EstimatedTime = 0
      ;   
      ;   ReceiveFTPFileEx(1, "wftpserver-linux-64bit.tar.gz", "D:\wftpserver-linux-64bit.tar.gz", 1, @ErrorOutput$)
      ;   
      ;   For a=1 To 100
      ;     FTPProgressEx(1, @PercentValue, @TransferRate, @EstimatedTime, @ErrorOutput$)
      ;     Debug PercentValue
      ;     Debug TransferRate
      ;     Debug EstimatedTime
      ;     Debug "--------"
      ;     Delay(100)
      ;   Next
      ;   
      ;   Delay(10000)
        
        CloseFTPEx(1, @ErrorOutput$)
      Else
        Debug ErrorOutput$
      EndIf
      
      ; Debug ""
      ; Debug "FTP..."
      ; 
      ; If OpenFTPEx(1, #PBEx_FTP_Protocol_FTP, ".........", 21, ".........", ".......", #PB_UTF8, @ErrorOutput$)
      ;   If ExamineFTPDirectoryEx(1, @ErrorOutput$)
      ;     While NextFTPDirectoryEntryEx(1, @ErrorOutput$)
      ;       FTPDirectoryEntryNameEx(1, @FileName$, @ErrorOutput$)
      ;       Debug FileName$
      ;     Wend
      ;     
      ;   EndIf
      ;   
      ;   CloseFTPEx(1, @ErrorOutput$)
      ; Else
      ;   Debug ErrorOutput$
      ;EndIf
      
      Debug ""
      Debug "FTPS explicit..."
      
      If OpenFTPEx(1, #PBEx_FTP_Protocol_FTPS_Explicit, "test.rebex.net", 21, "demo", "password", #PB_UTF8, @ErrorOutput$)
        If ExamineFTPDirectoryEx(1, @ErrorOutput$)
          While NextFTPDirectoryEntryEx(1, @ErrorOutput$)
            FTPDirectoryEntryNameEx(1, @FileName$, @ErrorOutput$)
            Debug FileName$
          Wend
          
        EndIf
        
        CloseFTPEx(1, @ErrorOutput$)
      Else
        Debug ErrorOutput$
      EndIf
      
      Debug ""
      Debug "FTPS implicit..."
      
      If OpenFTPEx(1, #PBEx_FTP_Protocol_FTPS_Implicit, "test.rebex.net", 990, "demo", "password", #PB_UTF8, @ErrorOutput$)
        If ExamineFTPDirectoryEx(1, @ErrorOutput$)
          While NextFTPDirectoryEntryEx(1, @ErrorOutput$)
            FTPDirectoryEntryNameEx(1, @FileName$, @ErrorOutput$)
            Debug FileName$
          Wend
          
        EndIf
        
        CloseFTPEx(1, @ErrorOutput$)
      Else
        Debug ErrorOutput$
      EndIf
      
      CloseLibrary(PBEx_FTP)
      
      
  • CloseFTPEx()
    • Syntax:

      Code: Select all

      Result = CloseFTPEx(ID, @ErrorOutput)
    • Description: Closes the open connection to the server.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • CheckFTPConnectionEx()
    • Syntax:

      Code: Select all

      Result = CheckFTPConnectionEx(ID, @ErrorOutput)
    • Description: Checks if the connection to the server still exists.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The connection to the server exists.
  • IsFTPEx()
    • Syntax:

      Code: Select all

      Result = IsFTPEx(ID, @ErrorOutput)
    • Description: Checks whether the ID was initialized correctly.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The ID is valid.
  • ExamineFTPDirectoryEx()
    • Syntax:

      Code: Select all

      Result = ExamineFTPDirectoryEx(ID, @ErrorOutput)
    • Description: Starts the list from the current directory.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • FinishFTPDirectoryEx()
    • Syntax:

      Code: Select all

      Result = FinishFTPDirectoryEx(ID, @ErrorOutput)
    • Description: Closes the list of the current directory.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • NextFTPDirectoryEntryEx()
    • Syntax:

      Code: Select all

      Result = NextFTPDirectoryEntryEx(ID, @ErrorOutput)
    • Description: The next folder or file is determined.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: Another folder or file exists.
  • FTPDirectoryEntryNameEx()
    • Syntax:

      Code: Select all

      Result = FTPDirectoryEntryNameEx(ID, @Output, @ErrorOutput)
    • Description: The folder or file name is determined.
    • Parameter:
      1. ID: The number of the connection.
      2. @Output: The folder or file name is stored in the string variable.
      3. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • FTPDirectoryEntrySizeEx()
    • Syntax:

      Code: Select all

      Result = FTPDirectoryEntrySizeEx(ID, @ErrorOutput)
    • Description: The size of the file is determined.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • The size of the file is returned.
  • FTPDirectoryEntryTypeEx()
    • Syntax:

      Code: Select all

      Result = FTPDirectoryEntryTypeEx(ID, @ErrorOutput)
    • Description: Checks whether the entry is a file or a folder.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: It's a file. #PB_FTP_File can be used.
      • 2: It's a folder. PB_FTP_Directory can be used.
  • FTPDirectoryEntryDateEx()
    • Syntax:

      Code: Select all

      Result = FTPDirectoryEntryDateEx(ID, @ErrorOutput)
    • Description: Determines the processing date of the file or folder.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • The processing date of the file or folder. The value can be used with the Date library.
  • FTPDirectoryEntryAttributesEx()
    • Syntax:

      Code: Select all

      Result = FTPDirectoryEntryAttributesEx(ID, @ErrorOutput)
    • Description: Determines the specified attributes of the file or folder.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • The specified attributes of the file or folder are returned. #PB_FTP_ReadUser, #PB_FTP_WriteUser, #PB_FTP_ExecuteUser, #PB_FTP_ReadGroup, #PB_FTP_WriteGroup, #PB_FTP_ExecuteGroup, #PB_FTP_ReadAll, #PB_FTP_WriteAll and #PB_FTP_ExecuteAll can be used.
  • GetFTPDirectoryEx()
    • Syntax:

      Code: Select all

      Result = GetFTPDirectoryEx(ID, @Output, @ErrorOutput)
    • Description: Determines the current path.
    • Parameter:
      1. ID: The number of the connection.
      2. @Output: The current path is stored in the string variable.
      3. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • SetFTPDirectoryEx()
    • Syntax:

      Code: Select all

      Result = SetFTPDirectoryEx(ID, DirectoryName$, @ErrorOutput)
    • Description: Opens a subfolder.
    • Parameter:
      1. ID: The number of the connection.
      2. DirectoryName$: Name of the folder to open.
      3. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • CreateFTPDirectoryEx()
    • Syntax:

      Code: Select all

      Result = CreateFTPDirectoryEx(ID, DirectoryName$, @ErrorOutput)
    • Description: Creates a new directory.
    • Parameter:
      1. ID: The number of the connection.
      2. DirectoryName$: Name of the folder to be created.
      3. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • DeleteFTPDirectoryEx()
    • Syntax:

      Code: Select all

      Result = DeleteFTPDirectoryEx(ID, DirectoryName$, @ErrorOutput)
    • Description: Deletes a directory.
    • Parameter:
      1. ID: The number of the connection.
      2. DirectoryName$: Name of the folder you want to delete.
      3. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • DeleteFTPFileEx()
    • Syntax:

      Code: Select all

      Result = DeleteFTPFileEx(ID, FileName$, @ErrorOutput)
    • Description: Deletes a file.
    • Parameter:
      1. ID: The number of the connection.
      2. FileName$: Name of the file to be deleted.
      3. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • RenameFTPFileEx()
    • Syntax:

      Code: Select all

      Result = RenameFTPFileEx(ID, FileName$, NewFileName$, @ErrorOutput)
    • Description: Renames a file.
    • Parameter:
      1. ID: The number of the connection.
      2. FileName$: Name of the file to be renamed.
      3. NewFileName$: The new name of the file.
      4. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • ReceiveFTPFileEx()
    • Syntax:

      Code: Select all

      Result = ReceiveFTPFileEx(ID, RemoteFileName$, FileName$, IsAsynchron, @ErrorOutput)
    • Description: Downloads a file.
    • Parameter:
      1. ID: The number of the connection.
      2. RemoteFileName$: Name of the file to download.
      3. FileName$: Local destination path.
      4. IsAsynchron: If 1, then the operation is performed asynchronously. FTPProgressEx() can be used to determine how far the operation has progressed.
      5. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • SendFTPFileEx()
    • Syntax:

      Code: Select all

      Result = SendFTPFileEx(ID, FileName$, RemoteFileName$, IsAsynchron, @ErrorOutput)
    • Description: Uploads a file.
    • Parameter:
      1. ID: The number of the connection.
      2. FileName$: Local path of the file to upload.
      3. RemoteFileName$: Name of the file.
      4. IsAsynchron: If 1, then the operation is performed asynchronously. FTPProgressEx() can be used to determine how far the operation has progressed.
      5. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • SendFTPFileEx()
    • Syntax:

      Code: Select all

      Result = FTPProgressEx(ID, @PercentValue, @TransferRate, @EstimatedTime, @ErrorOutput)
    • Description: Determines how far the process is. This function is valid for ReceiveFTPFileEx() or SendFTPFileEx() and when the IsAsynchronous parameter is set to 1.
    • Parameter:
      1. ID: The number of the connection.
      2. @PercentValue: In this variable the percentage value is stored, how far the process is.
      3. @TransferRate: The current transmission rate is stored in bytes in this variable.
      4. @EstimatedTime: The estimated time in seconds is stored in this variable.
      5. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
  • AbortFTPFileEx()
    • Syntax:

      Code: Select all

      Result = AbortFTPFileEx(ID, @ErrorOutput)
    • Description: Cancels the current download or upload.
    • Parameter:
      1. ID: The number of the connection.
      2. @ErrorOutput: If an error occurs, the error message is stored in the string variable.
    • Return value:
      • 1: The process was successful.
System requirements:
  • Windows XP or higher
  • .NET Framework 4.8 or higher
  • Unicode activation (standard from PB 5.50)
Licence: This DLL file is free of charge and may be used both privately and commercially.
The following copyright texts must be provided:
Copyright (c) 2015 Robin Rodricks and FluentFTP Contributors
Copyright © 2019 RSBasic.de
Download: https://www.rsbasic.de/downloads/downlo ... Ex_FTP.zip
Image

I would be very pleased about feedbacks, improvement suggestions, error messages or wishes. If you want to support me, you can also donate me a little something. Thanks:)
Image
Image
User avatar
Zebuddi123
Enthusiast
Enthusiast
Posts: 794
Joined: Wed Feb 01, 2012 3:30 pm
Location: Nottinghamshire UK
Contact:

Re: PB.Ex SFTP

Post by Zebuddi123 »

Hi RSBasic Looks like your on a roll. Ill be look at this later after some sleep :) Thanks

Zebuddi.
malleo, caput, bang. Ego, comprehendunt in tempore
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

PB.Ex FTP 1.0.1.0 has been released.

Changelog:
  • Changed: Name of library changed from PB.Ex SFTP to PB.Ex FTP, because from this version SFTP, FTP and FTPS are supported.
  • Changed: Function names have been renamed. E.g. OpenSFTP() in OpenFTPEx()
  • Added: FTP support
  • Added: FTPS support with implicit and explicit SSL protocol
  • Added: Added charset parameter for OpenFTPEx().
  • Added: Added protocol parameter for OpenFTPEx().
  • Bugfixes
Image
Image
User avatar
Paul
PureBasic Expert
PureBasic Expert
Posts: 1243
Joined: Fri Apr 25, 2003 4:34 pm
Location: Canada
Contact:

Re: PB.Ex FTP (Windows)

Post by Paul »

With WinSCP you can use -hostkey=* to automatically accept the expected host key
How do you do something similar with your DLL ?
Currently I cannot connect to my FTP server because of this... error message is:

FTPS explicit...
Error: The remote certificate is invalid according to the validation procedure
Image Image
User avatar
Paul
PureBasic Expert
PureBasic Expert
Posts: 1243
Joined: Fri Apr 25, 2003 4:34 pm
Location: Canada
Contact:

Re: PB.Ex-Wishes

Post by Paul »

Your PB.Ex FTP library doesn't quite work.
In order for it to do FTPS it needs to work with certificates and it doesn't seem to have any options for that.

Apps like WinSCP have a flag -hostkey=* to automatically accept the expected host key

__________________________________________________
Post moved
Announcement>Applications - Feedback and Discussion
PB.Ex-Wishes>PB.Ex FTP (Windows)
02.04.2018
RSBasic
Image Image
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

@Paul
Do you have a test server for me? (IP or domain with port and username and password)
It worked with the tested servers of rebex.net. (FTPS implicit and explicit)
I don't have any other test servers. If you could give me temporary FTP access, it's very helpful and useful.
Image
Image
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

Hello Paul,

I have a new version for you. Can you test this version? I don't have an FTP server to test.
New version: http://www.rsbasic.de/downloads/downloa ... Ex_FTP.zip
Can you test it again? Thank you :)
Image
Image
User avatar
Paul
PureBasic Expert
PureBasic Expert
Posts: 1243
Joined: Fri Apr 25, 2003 4:34 pm
Location: Canada
Contact:

Re: PB.Ex FTP (Windows)

Post by Paul »

Hello RSBasic,

Your new version has fixed things.
FTPS both explicit and Implicit work perfectly now.

Very nice work !!
Image Image
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

Wow, thank you very much for this positive feedback. :)
Image
Image
User avatar
Paul
PureBasic Expert
PureBasic Expert
Posts: 1243
Joined: Fri Apr 25, 2003 4:34 pm
Location: Canada
Contact:

Re: PB.Ex FTP (Windows)

Post by Paul »

I found this library so useful to me, I put together a small Windows help file for my own reference.
You are quite welcome to include it in your ZIP file.

PBExFTP Help File
Image Image
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

Hello Paul,

thank you very much for creating your documentation in pdf and chm file. Image
I updated my archive file.
Image
Image
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

PB.Ex FTP 1.0.3.0 has been released.

Changelog:
  • Bugfix
Image
Image
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

PB.Ex FTP 1.0.4.0 has been released.

Changelog:
  • Added: FTPProgressEx()
  • Extended: ReceiveFTPFileEx(): Parameter "IsAsynchron" was added.
  • Extended: SendFTPFileEx(): Parameter "IsAsynchron" was added.
  • Changed: System requirements: .NET Framework 4.0 -> .NET Framework 4.5, because the required Assembly System.Progress does not exist until 4.5.
  • Changed: OutputError$ must be reserved with 128 characters before passing. Maximum length of the return is 128 characters including the NULL character.
  • Changed: OutputError$: This parameter is now optional and can be 0.
Image
Image
User avatar
RSBasic
Moderator
Moderator
Posts: 1218
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: PB.Ex FTP (Windows)

Post by RSBasic »

PB.Ex FTP 1.0.5.0 has been released.

Changelog:
  • Bugfix: FTPProgressEx(): Did not work with very small files.
Image
Image
davebar
User
User
Posts: 82
Joined: Fri Aug 31, 2018 9:23 am
Location: Australia

Re: PB.Ex FTP (Windows)

Post by davebar »

RSBasic wrote:PB.Ex FTP 1.0.5.0 has been released.
The downloaded code reads:

Code: Select all

Global PBEx_FTP
#PBEx_FTP_Version$ = "1.0.4.0"
Was this an oversight in the update?
Post Reply