Yes, you can do that. You don't need to (explicitly) use FTP. Just use C in Dired to copy from one directory to the other. You can copy in either direction: from local to remote or remote to local.
Dired buffer #1 is for local directory ~jpepin/mydir/.
Dired buffer #1 is for remote directory /foo.bar.toto.com:/home/jpepin/mydir/.
I use a simple password manager called pass. It offers a simple command line interface with is ideal for integrating with Emacs. The backing store is a GPG encrypted GIT repo. It actually ships with an Emacs package although I don't use it. My interface is laughably simple:
(defun my-fixup-gpg-agent (frame)
"Tweak DISPLAY and GPG_TTY environment variables ...
Tramp uses the auth-sources backend for managing passwords. It needs some specialized entries in .authinfo, like
machine melancholia port scp login daniel password geheim
Read the Tramp manual, chapter "Password handling", for details.
auth-sources have also some functionality to create password entries on-the-fly. I've never tried this functionality ...
Have you had a look at Sunrise Commander (EmacsWiki page)?
It builds on Dired to provide a 2 pane file manager similar to Norton Commander and Midnight Commander.
This can let you view both directories (as long as you can access the second directory through TRAMP it should be able to be accessed through Dired).
Commands at that point mirror Dired where ...
As @legoscia mentions, one solution is to store the username and password in an external file. This is necessary because TRAMP's file syntax does not support specifying the password inline. If you really are using the ftp protocol, then you can use the ~/.netrc file, with basic syntax:
machine HOST login USER password PASS
described in more detail here. ...
Figured it out: (setq shell-input-autoexpand nil). I spent a long while looking at comint-input-autoexpand which was getting mysteriously set to 'history: this is done by shell-mode based on shell-input-autoexpand. I don't see an easy way to make it prompt-dependent, though.
The error tells you the problem, I think:
Cannot find Cygwin. Please customize option `cygwin-root-directory'
You need to set that variable. Use M-x customize-option RET cygwin-root-directory RET to do that.
(That said, the code should have handled a non-string argument to setcyg-dir-p. Download the latest setup-cygwin.el to get that fix.)