diff --git a/client_test.go b/client_test.go index a713556..1f9cf81 100644 --- a/client_test.go +++ b/client_test.go @@ -96,6 +96,33 @@ func testConn(t *testing.T, disableEPSV bool) { r.Close() } + fileSize, err := c.FileSize("tset") + if err != nil { + t.Error(err) + } + if fileSize != 14 { + t.Errorf("file size %q, expected %q", fileSize, 14) + } + + data = bytes.NewBufferString("") + err = c.Stor("tset", data) + if err != nil { + t.Error(err) + } + + fileSize, err = c.FileSize("tset") + if err != nil { + t.Error(err) + } + if fileSize != 0 { + t.Errorf("file size %q, expected %q", fileSize, 0) + } + + fileSize, err = c.FileSize("not-found") + if err == nil { + t.Fatal("expected error, got nil") + } + err = c.Delete("tset") if err != nil { t.Error(err) diff --git a/ftp.go b/ftp.go index 81c04db..b2b491e 100644 --- a/ftp.go +++ b/ftp.go @@ -407,6 +407,16 @@ func (c *ServerConn) CurrentDir() (string, error) { return msg[start+1 : end], nil } +// FileSize issues a SIZE FTP command, which Returns the size of the file +func (c *ServerConn) FileSize(path string) (int64, error) { + _, msg, err := c.cmd(StatusFile, "SIZE %s", path) + if err != nil { + return 0, err + } + + return strconv.ParseInt(msg, 10, 64) +} + // Retr issues a RETR FTP command to fetch the specified file from the remote // FTP server. //