FTP: Difference between revisions

Content added Content deleted
(→‎{{header|Ruby}}: Added Ruby)
Line 2: Line 2:


Connect to a server, change directory, list its contents and download a file as binary using the FTP protocol. Use passive mode if available.
Connect to a server, change directory, list its contents and download a file as binary using the FTP protocol. Use passive mode if available.

=={{header|Go}}==
Using the FTP package from [https://godoc.org/github.com/stacktic/ftp github.com/stacktic/ftp].
<lang go>package main

import (
"fmt"
"io"
"log"
"os"

"github.com/stacktic/ftp"
)

func main() {
// Hard-coded demonstration values
const (
hostport = "localhost:21"
username = "anonymous"
password = "anonymous"
dir = "pub"
file = "somefile.bin"
)

conn, err := ftp.Connect(hostport)
if err != nil {
log.Fatal(err)
}
defer conn.Quit()
fmt.Println(conn)

if err = conn.Login(username, password); err != nil {
log.Fatal(err)
}
if err = conn.ChangeDir(dir); err != nil {
log.Fatal(err)
}
fmt.Println(conn.CurrentDir())
files, err := conn.List(".")
if err != nil {
log.Fatal(err)
}
for _, f := range files {
fmt.Printf("%v %12d %v %v\n", f.Time, f.Size, f.Type, f.Name)
}

r, err := conn.Retr(file)
if err != nil {
log.Fatal(err)
}
defer r.Close()

f, err := os.Create(file)
if err != nil {
log.Fatal(err)
}
defer f.Close()

n, err := io.Copy(f, r)
if err != nil {
log.Fatal(err)
}

fmt.Println("Wrote", n, "bytes to", file)
}</lang>


=={{header|Java}}==
=={{header|Java}}==