Topic "Script can't find certain files"

Author Message
equimax
[View user's profile]

Joined: 2010-03-25
Posts: 4
I am running WinSCP 4.2.7 build 758 on WinXP PRO SP3. I have a script which runs from a batch file which works just fine except certain files are reported as non-existent when they actually exist. Here is the script (weblists.bat) with password removed for security:

# Automatically answer all prompts negatively not to stall
# the script on errors
option batch on
# Disable overwrite confirmations that conflict with the previous
option confirm off
# Connect using a password
open equimax:password@equimax.com
# Change remote directory
cd /htdocs/equimax/home
# Force binary mode transfer
option transfer binary
# Upload file to the remote directory
put c:\netfiles\weblists\weblists.zip
put c:\netfiles\weblists\C_LIST_D.php
put c:\netfiles\weblists\CANDS_D.PHP
put c:\netfiles\weblists\CLIENTS_D.PHP
put c:\netfiles\weblists\J_LIST_D.PHP
put c:\netfiles\weblists\JLSUB_D.PHP
put c:\netfiles\weblists\JOBS_D.PHP
put c:\netfiles\weblists\LISTCAND_D.PHP
put c:\netfiles\weblists\RECTS_D.PHP
put c:\netfiles\weblists\empnojob.txt
# Disconnect
close
# Exit WinSCP
exit

The batch file command which runs this script is:

"c:\program files\winscp3\winscp.com" /script=c:\netfiles\scpscripts\weblists.txt

The files named weblists.zip and empnojob.txt transfer just fine. The others cannot be found. Here are the results as shown in the command window:

C:\Documents and Settings\Seth>"c:\program files\winscp3\winscp.com" /script=c
netfiles\scpscripts\weblists.txt
batch on
confirm off
Searching for host...
Connecting to host...
Authenticating...
Using username "equimax".
Authenticating with pre-entered password.
Authenticated.
Starting the session...
Reading remote directory...
Session started.
Active session: [1] equimax@equimax.com
/htdocs/equimax/home
transfer binary
c:\...\WEBLISTS.ZIP | 219 KiB | 37.6 KiB/s | binary | 100%
File or folder 'c:\netfiles\weblists\C_LIST_D.php' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
File or folder 'c:\netfiles\weblists\CANDS_D.PHP' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
File or folder 'c:\netfiles\weblists\CLIENTS_D.PHP' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
File or folder 'c:\netfiles\weblists\J_LIST_D.PHP' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
File or folder 'c:\netfiles\weblists\JLSUB_D.PHP' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
File or folder 'c:\netfiles\weblists\JOBS_D.PHP' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
File or folder 'c:\netfiles\weblists\LISTCAND_D.PHP' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
File or folder 'c:\netfiles\weblists\RECTS_D.PHP' does not exist.
System Error. Code: 2.
The system cannot find the file specified
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
c:\...\empnojob.txt | 0 KiB | 0.0 KiB/s | binary | 100%
Session 'equimax@equimax.com' closed.
No session.

Anyone know why the PGP files are not being found? I have tried putting path in quotes, tried sending files without underscores.

Stumped. Confused
Advertisements
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
If you run WinSCP GUI and navigate to the folder, do you see the files? Can you upload them?
_________________
Martin Prikryl
equimax
[View user's profile]

Joined: 2010-03-25
Posts: 4
prikryl wrote:
If you run WinSCP GUI and navigate to the folder, do you see the files? Can you upload them?


Yes, the GUI sees the files and they can be uploaded just fine.

?????
mrx

Guest


Hi,

I'm running the same version. The problem is that I have the following problem while running the copy-script (from a remote server to a local machine) from time to time:
Code:

3.png     |          4 KiB |    6.7 KiB/s | binary | 100%
4.png     |          0 KiB |    3.2 KiB/s | binary |   0%
Error transferring file '/folder2/folder.loc/web/4.png'.
Copying files from remote side failed.
Can't open data connection.
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort
Session 'test' closed.
No session.

And next time the process could go with no errors at all. So how can I use (R)etry-option instead of default (A)bort one? I checked up with the settings and didn't find anything about it so far. Thank you.
mrx

Guest


And I am not sure if this works:

Bug fix: When file transfer failed with FTP protocol, whole batch was interrupted, without an option to retry or skip the file transfer.

It happens again and again for different servers and different files and with the same error - can't open data connection and then the session gets closed instead of retrying/skipping file copying automatically. If it is fixed, please, tell me how explicitly to turn that option on in a script or ini-file. Thank you.
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
equimax wrote:
Yes, the GUI sees the files and they can be uploaded just fine.

Can you post a log file both from GUI and script showing upload of a single file?
_________________
Martin Prikryl
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
mrx wrote:
Bug fix: When file transfer failed with FTP protocol, whole batch was interrupted, without an option to retry or skip the file transfer.

Thanks for your post. This issue is being tracked already.
_________________
Martin Prikryl
equimax
[View user's profile]

Joined: 2010-03-25
Posts: 4
prikryl wrote:
equimax wrote:
Yes, the GUI sees the files and they can be uploaded just fine.

Can you post a log file both from GUI and script showing upload of a single file?


Yes. Thanks for looking into this for me.

Here is the log file for the GUI.

. 2010-03-29 10:10:17.868 Copying 1 files/directories to remote directory "/htdocs/equimax/home/"
. 2010-03-29 10:10:17.878 PrTime: Yes; PrRO: Yes; Rght: rw-r--r--; PrR: No (No); FnCs: N; RIC: 01; Resume: S (102400); CalcS: Yes; Mask: *.*
. 2010-03-29 10:10:17.878 TM: M; ClAr: No; CPS: 0; ExclM(No):
. 2010-03-29 10:10:17.878 AscM: *.*html; *.htm; *.txt; *.php*; *.cgi; *.c; *.cpp; *.h; *.pas; *.bas; *.tex; *.pl; .htaccess; *.xtml; *.css; *.cfg; *.ini; *.sh; *.xml
. 2010-03-29 10:10:17.878 File: "C:\netfiles\weblists\CANDS_D.PGP"
. 2010-03-29 10:10:18.258 Copying "C:\netfiles\weblists\CANDS_D.PGP" to remote directory started.
. 2010-03-29 10:10:18.278 Binary transfer mode selected.
. 2010-03-29 10:10:18.288 Checking existence of file.
> 2010-03-29 10:10:18.288 Type: SSH_FXP_LSTAT, Size: 41, Number: 1543
< 2010-03-29 10:10:18.288 Type: SSH_FXP_STATUS, Size: 24, Number: 1284
. 2010-03-29 10:10:18.288 Discarding reserved response
< 2010-03-29 10:10:18.358 Type: SSH_FXP_STATUS, Size: 29, Number: 1543
< 2010-03-29 10:10:18.358 Status code: 2
. 2010-03-29 10:10:18.358 Checking existence of partially transfered file.
> 2010-03-29 10:10:18.358 Type: SSH_FXP_LSTAT, Size: 50, Number: 1799
< 2010-03-29 10:10:18.419 Type: SSH_FXP_STATUS, Size: 29, Number: 1799
< 2010-03-29 10:10:18.419 Status code: 2
. 2010-03-29 10:10:18.419 Opening remote file.
> 2010-03-29 10:10:18.419 Type: SSH_FXP_OPEN, Size: 66, Number: 2051
< 2010-03-29 10:10:18.509 Type: SSH_FXP_HANDLE, Size: 13, Number: 2051
> 2010-03-29 10:10:18.639 Type: SSH_FXP_WRITE, Size: 4121, Number: 2566
. 2010-03-29 10:10:50.675 82 skipped SSH_FXP_WRITE, SSH_FXP_READ, SSH_FXP_DATA and SSH_FXP_STATUS packets.
> 2010-03-29 10:10:50.685 Type: SSH_FXP_CLOSE, Size: 13, Number: 13572
< 2010-03-29 10:10:50.695 Type: SSH_FXP_STATUS, Size: 24, Number: 12806
< 2010-03-29 10:10:52.267 Type: SSH_FXP_STATUS, Size: 24, Number: 13062
< 2010-03-29 10:10:52.387 Type: SSH_FXP_STATUS, Size: 24, Number: 13318
< 2010-03-29 10:10:52.387 Type: SSH_FXP_STATUS, Size: 24, Number: 13572
< 2010-03-29 10:10:52.387 Status code: 0
> 2010-03-29 10:10:52.457 Type: SSH_FXP_RENAME, Size: 86, Number: 13842
< 2010-03-29 10:10:52.528 Type: SSH_FXP_STATUS, Size: 24, Number: 13842
< 2010-03-29 10:10:52.528 Status code: 0
> 2010-03-29 10:10:52.528 Type: SSH_FXP_SETSTAT, Size: 53, Number: 2313
< 2010-03-29 10:10:52.598 Type: SSH_FXP_STATUS, Size: 24, Number: 2313
< 2010-03-29 10:10:52.808 Status code: 0
. 2010-03-29 10:10:52.828 Listing directory "/htdocs/equimax/home".
> 2010-03-29 10:10:52.828 Type: SSH_FXP_OPENDIR, Size: 29, Number: 14091
< 2010-03-29 10:10:52.888 Type: SSH_FXP_HANDLE, Size: 13, Number: 14091
> 2010-03-29 10:10:52.888 Type: SSH_FXP_READDIR, Size: 13, Number: 14348
< 2010-03-29 10:10:52.958 Type: SSH_FXP_NAME, Size: 573, Number: 14348
> 2010-03-29 10:10:52.958 Type: SSH_FXP_READDIR, Size: 13, Number: 14604
< 2010-03-29 10:10:53.058 Type: SSH_FXP_STATUS, Size: 28, Number: 14604
< 2010-03-29 10:10:53.229 Status code: 1
> 2010-03-29 10:10:53.229 Type: SSH_FXP_CLOSE, Size: 13, Number: 14852


Now here is the log file for the command line transfer.

. 2010-03-29 10:28:19.483 --------------------------------------------------------------------------
. 2010-03-29 10:28:19.483 WinSCP Version 4.2.7 (Build 758) (OS 5.1.2600 Service Pack 3)
. 2010-03-29 10:28:19.483 Login time: Monday, March 29, 2010 10:28:19 AM
. 2010-03-29 10:28:19.483 --------------------------------------------------------------------------
. 2010-03-29 10:28:19.483 Session name: equimax@equimax.com
. 2010-03-29 10:28:19.483 Host name: equimax.com (Port: 13140)
. 2010-03-29 10:28:19.483 User name: equimax (Password: Yes, Key file: No)
. 2010-03-29 10:28:19.533 Tunnel: No
. 2010-03-29 10:28:19.533 Transfer Protocol: SFTP (SCP)
. 2010-03-29 10:28:19.533 Ping type: -, Ping interval: 30 sec; Timeout: 15 sec
. 2010-03-29 10:28:19.533 Proxy: none
. 2010-03-29 10:28:19.533 SSH protocol version: 2; Compression: No
. 2010-03-29 10:28:19.533 Bypass authentication: No
. 2010-03-29 10:28:19.533 Try agent: Yes; Agent forwarding: No; TIS/CryptoCard: No; KI: Yes; GSSAPI: No
. 2010-03-29 10:28:19.533 Ciphers: aes,blowfish,3des,WARN,arcfour,des; Ssh2DES: No
. 2010-03-29 10:28:19.533 SSH Bugs: -,-,-,-,-,-,-,-,-
. 2010-03-29 10:28:19.533 SFTP Bugs: -,-
. 2010-03-29 10:28:19.533 Return code variable: Autodetect; Lookup user groups: Yes
. 2010-03-29 10:28:19.533 Shell: default, EOL: 0
. 2010-03-29 10:28:19.533 Clear aliases: Yes, Unset nat.vars: Yes, Resolve symlinks: Yes
. 2010-03-29 10:28:19.533 LS: ls -la, Ign LS warn: Yes, Scp1 Comp: No
. 2010-03-29 10:28:19.533 Local directory: default, Remote directory: home, Update: No, Cache: Yes
. 2010-03-29 10:28:19.533 Cache directory changes: Yes, Permanent: Yes
. 2010-03-29 10:28:19.533 DST mode: 1
. 2010-03-29 10:28:19.533 --------------------------------------------------------------------------
. 2010-03-29 10:28:19.533 Looking up host "equimax.com"
. 2010-03-29 10:28:19.813 Connecting to 69.93.63.14 port 13140
. 2010-03-29 10:28:20.094 Server version: SSH-2.0-OpenSSH_5.2
. 2010-03-29 10:28:20.094 Using SSH protocol version 2
. 2010-03-29 10:28:20.094 We claim version: SSH-2.0-WinSCP_release_4.2.7
. 2010-03-29 10:28:20.164 Doing Diffie-Hellman group exchange
. 2010-03-29 10:28:20.314 Doing Diffie-Hellman key exchange with hash SHA-1
. 2010-03-29 10:28:20.825 Host key fingerprint is:
. 2010-03-29 10:28:20.825 ssh-rsa 1024 ac:6d:be:2d:0c:2a:b2:a3:a4:73:c4:42:f6:77:e5:ec
. 2010-03-29 10:28:20.835 Initialised AES-256 SDCTR client->server encryption
. 2010-03-29 10:28:20.835 Initialised HMAC-SHA1 client->server MAC algorithm
. 2010-03-29 10:28:20.835 Initialised AES-256 SDCTR server->client encryption
. 2010-03-29 10:28:20.835 Initialised HMAC-SHA1 server->client MAC algorithm
! 2010-03-29 10:28:20.965 Using username "equimax".
. 2010-03-29 10:28:21.165 Prompt (6, SSH password, , &Password: )
. 2010-03-29 10:28:21.165 Using stored password.
. 2010-03-29 10:28:21.175 Sent password
. 2010-03-29 10:28:21.616 Access granted
. 2010-03-29 10:28:21.676 Opened channel for session
. 2010-03-29 10:28:21.826 Started a shell/command
. 2010-03-29 10:28:21.836 --------------------------------------------------------------------------
. 2010-03-29 10:28:21.836 Using SFTP protocol.
. 2010-03-29 10:28:21.836 Doing startup conversation with host.
> 2010-03-29 10:28:21.836 Type: SSH_FXP_INIT, Size: 5, Number: -1
< 2010-03-29 10:28:21.896 Type: SSH_FXP_VERSION, Size: 5, Number: -1
. 2010-03-29 10:28:21.896 SFTP version 3 negotiated.
. 2010-03-29 10:28:21.896 We believe the server has signed timestamps bug
. 2010-03-29 10:28:21.896 We will use UTF-8 strings for status messages only
. 2010-03-29 10:28:21.896 Limiting packet size to OpenSSH sftp-server limit of 262148 bytes
. 2010-03-29 10:28:21.906 Getting current directory name.
. 2010-03-29 10:28:21.906 Getting real path for '.'
> 2010-03-29 10:28:21.906 Type: SSH_FXP_REALPATH, Size: 10, Number: 16
< 2010-03-29 10:28:21.957 Type: SSH_FXP_NAME, Size: 47, Number: 16
. 2010-03-29 10:28:21.957 Real path is '/home/equimax'
. 2010-03-29 10:28:21.957 Startup conversation with host finished.
. 2010-03-29 10:28:21.967 Cached directory change via "/htdocs/equimax/home" to "/htdocs/equimax/home".
. 2010-03-29 10:28:21.967 Getting current directory name.
. 2010-03-29 10:28:21.997 Copying 1 files/directories to remote directory "/htdocs/equimax/home"
. 2010-03-29 10:28:21.997 PrTime: Yes; PrRO: Yes; Rght: rw-r--r--; PrR: No (No); FnCs: N; RIC: 01; Resume: S (102400); CalcS: No; Mask:
. 2010-03-29 10:28:21.997 TM: B; ClAr: No; CPS: 0; ExclM(No):
. 2010-03-29 10:28:21.997 AscM: *.*html; *.htm; *.txt; *.php*; *.cgi; *.c; *.cpp; *.h; *.pas; *.bas; *.tex; *.pl; .htaccess; *.xtml; *.css; *.cfg; *.ini; *.sh; *.xml
. 2010-03-29 10:28:21.997 File: "c:\netfiles\weblists\CANDS_D.PHP"
* 2010-03-29 10:28:21.997 (EOSError) System Error. Code: 2.

* 2010-03-29 10:28:21.997 The system cannot find the file specified
. 2010-03-29 10:28:21.997 Asking user:
. 2010-03-29 10:28:21.997 File or folder 'c:\netfiles\weblists\CANDS_D.PHP' does not exist. ("System Error. Code: 2.

. 2010-03-29 10:28:21.997 The system cannot find the file specified")
* 2010-03-29 10:28:22.027 (EScpSkipFile) File or folder 'c:\netfiles\weblists\CANDS_D.PHP' does not exist.
* 2010-03-29 10:28:22.027 System Error. Code: 2.
* 2010-03-29 10:28:22.027 The system cannot find the file specified
. 2010-03-29 10:28:22.047 Closing connection.
. 2010-03-29 10:28:22.047 Sending special code: 12
. 2010-03-29 10:28:22.047 Sent EOF message


Confused
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
File is .PGP, while you download .PHP in the script.
_________________
Martin Prikryl
equimax
[View user's profile]

Joined: 2010-03-25
Posts: 4
prikryl wrote:
File is .PGP, while you download .PHP in the script.


Boy do I feel dumb. I work with PHP files so often that I completely missed the mistake, even though I looked at it multiple times. Thanks so much for solving the problem for me. Sorry to have bothered you.

Best Regards,

Seth
Guest




Hi I am new to WinSCP, I am using Winscp with VB.Net.
I just want to download a file from remote directory to local directory (C:\Document And Settings), but I am below error.

"Can't get attributes of file 'C:\Documents'.
No such file or directory.
Error code: 2
Error message from server: No such file
Request code: 7"

Please suggest a solution. Thanks


Below is my code:
Private Function WinSCPDownload() As Boolean
Try
If (Login()) Then

With WinSCP.StandardInput

.WriteLine("cd /data/test/out")
.WriteLine("ls *-International-*.xml")

.WriteLine("get -nopreservetime *-International-*.* C:\Documents and settings\")

.Close()

End With

End If

Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try

End Function


Error:

winscp> cd /data/test/out
/data/test/out
winscp> ls *-International-*.xml
winscp> get -nopreservetime *-International-*.* C:\Documents and settings\
Can't get attributes of file 'C:\Documents'.
No such file or directory.
Error code: 2
Error message from server: No such file
Request code: 7

The program '[2628] WindowsApplicationJK.exe' has exited with code 0 (0x0).
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
Quote:
get -nopreservetime *-International-*.* C:\Documents and settings\

Should be (note the quotes):
get -nopreservetime *-International-*.* "C:\Documents and settings\"
_________________
Martin Prikryl
shruti28851

Guest


It connected to the session successfully and when I manually put in a date it works.

But i get the error message Can't get attributes of File 'NameofFile'
File or folder 'NameofFile' does not exist.


This is my code:

@echo off
@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
Set Month=%%A
Set Day=%%B
Set Year=%%C

set file1=Cxxx_Dxxxx_%DATE:~-4%%DATE:~4,2%%DATE:~7,2%.csv

)

cd "C:\Program Files (x86)\WinSCP"
WinSCP.com /command "open Sharefile" "option confirm off" "cd /CUDC/" "get %file1% X:\SSx\CUDC\Fee\test\%file1%"

pause
exit
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
shruti28851 wrote:
It connected to the session successfully and when I manually put in a date it works.

But i get the error message Can't get attributes of File 'NameofFile'
File or folder 'NameofFile' does not exist.

And does it exist?
Please attach a full log file showing the problem.
_________________
Martin Prikryl
shruti28851

Guest


@echo off
@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
Set Month=%%A
Set Day=%%B
Set Year=%%C

set file1=test123_%DATE:~-4%%DATE:~4,2%%DATE:~7,2%.csv
)

cd "C:\Program Files (x86)\WinSCP"
WinSCP.com /command "open Sharefile" "option confirm off" "cd /test/" "get %file1% X:\SSSFolder\Test\%file1%"

pause
exit


IT connects to the FTp server and then I get cannot get attribute of file test123_20120813.csv
File or folder 'test123_20120813.csv does not exist"


The folder X:\SSSFolder\Test does exist... When i manually put a date it works .



prikryl wrote:
shruti28851 wrote:
It connected to the session successfully and when I manually put in a date it works.

But i get the error message Can't get attributes of File 'NameofFile'
File or folder 'NameofFile' does not exist.

And does it exist?
Please attach a full log file showing the problem.
Eko

Guest


Hi Lewis,I'm sorry you're finding the code dcfifiult to follow. The reason for using an include file in this particular case is to make the code more modular. It's designed to work with any multi-page form regardless of the number of pages or what they're called. As a result, you need to work with variables, which can make the code more dcfifiult to understand. However, it's relatively simple.As the book explains in step 3 on page 274, $filename contains the name of the current page, and $current contains the full URL of the current page. The PHP str_replace() function takes three arguments: the value you want to replace, the value you want to use instead, and the original string that you want to alter (the target string ). So, if $filename is multiple_01.php and $nextPage is multiple_02.php, $redirectNext = str_replace($filename, $nextPage, $current); stores the full URL of multiple_02.php in $redirectNext.You're not overwriting the current page, you're passing its URL as an argument to str_replace() to create the URL of the next page. If it helps you to understand the code better, use echo to display the value of each variable. Doing so will prevent the redirect from being executed, but once you understand what each variable is storing and how str_replace() works, the code should become clearer.Now, to your second point:if ($filename != $firstPage !isset($_SESSION['formStarted'])){ //redirect code;}As it explains on page 274, basename($_SERVER['SCRIPT_FILENAME']) gets the filename of the current file, and stores it as $filename. So, when the first page is accessed, the value of $filename is multiple_01.php. When the second page is accessed, it's multiple_02.php, and so on. Consequently, on the second page, $filename and $firstPage will have different values. And if $_SESSION['formStarted']) doesn't exist, you know the first page of the form hasn't been filled in, so the script redirects the user to the first page.Finally, the meaning of this line:$temp = is_array($value) ? $value : trim($value);$value contains the value of the current element in the $_POST array. In most cases, this will be a string, which can safely be passed to trim(). However, when the form submits a checkbox group or a multiple-choice list (see PHP Solutions 5-9 and 5-11), the values are sent as an array. The trim() function generates an error if you pass it anything other than a string or number. Using the ternary operator makes sure that arrays are assigned directly to $temp, but all other values are first stripped of leading and trailing whitespace.I hope those explanations clear up the mystery for you. When I wrote the first edition of PHP Solutions, I agreed with my editor to leave out explanations of the more complex parts of the code, because it was common for readers to just want to copy and paste the code. But I'm delighted that people like you are probing more deeply into the meaning. If the book ever goes to a third edition, I'll take more time explaining the reasoning behind the code.
Advertisements

You can post new topics in this forum






Search Site

What is WinSCP?

It is award-winning SFTP client, SCP client, FTPS client and FTP client integrated into one software program for file transfer to FTP server or secure SFTP server. [More]

And it's free!

Donate

About donations

$9   $19   $49   $99

About donations

Recommend

WinSCP Privacy Policy

WinSCP License