浏览代码

Merge pull request #76 from vahid-sohrabloo/patch-1

Add Size Command
Julien Laffaye 8 年之前
父节点
当前提交
106ab1b13b
共有 2 个文件被更改,包括 37 次插入0 次删除
  1. 27 0
      client_test.go
  2. 10 0
      ftp.go

+ 27 - 0
client_test.go

@@ -96,6 +96,33 @@ func testConn(t *testing.T, disableEPSV bool) {
 		r.Close()
 		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")
 	err = c.Delete("tset")
 	if err != nil {
 	if err != nil {
 		t.Error(err)
 		t.Error(err)

+ 10 - 0
ftp.go

@@ -407,6 +407,16 @@ func (c *ServerConn) CurrentDir() (string, error) {
 	return msg[start+1 : end], nil
 	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
 // Retr issues a RETR FTP command to fetch the specified file from the remote
 // FTP server.
 // FTP server.
 //
 //