Archived Forum PostQuestion:
Using the latest release (the SP1 build, but the 9.4.1 build shows the same issue) get_NumFilesAndDirs() returns 0 when there is a file or subdirectory present.
I have made a little sample program that dumps the lastErrorText and sessionlog after the get_NumFilesAndDirs() call, it clearly shows that a sub-directory called INTRUM is present, so I expect get_NumFilesAndDirs() to return 1 instead of 0.
When I changedirectory to INTRUM and call get_NumFilesAndDirs it also returns 0 (but there really is a file present).
I will email you a link to the sample program with the user/password/servername included.
void dump(wchar_t* what, CkFtp2& ftp, bool clearsessionlog)
{
_tprintf(L"=====%s=====\nlasterrortext:\n", what);
CkString s; s.put_Utf8(true);
s.appendUtf8(ftp.lastErrorText());
_tprintf(L"%s\n\n", s.getUnicode());
_tprintf(L"sessionlog:\n");
s.clear();
s.appendUtf8(ftp.sessionLog());
_tprintf(L"%s\n", s.getUnicode());
_tprintf(L"END==%s=====\n", what);
if (clearsessionlog)
ftp.ClearSessionLog();
}
.....
CkFtp2 ftp;
ftp.UnlockComponent("secret");
ftp.put_Utf8(true);
ftp.put_Hostname("???");
ftp.put_Username("???");
ftp.put_Password("???");
ftp.put_Passive(true);
ftp.put_AutoFeat(true);
ftp.put_AutoSyst(true);
ftp.put_Ssl(true);
ftp.put_AuthTls(false);
ftp.put_Port(990);
ftp.put_KeepSessionLog(true);
ftp.put_VerboseLogging(true);
if (ftp.Connect()==true)
{
dump(L"connect ok", ftp, true);
_tprintf(L"changeremote to /\n");
if (ftp.ChangeRemoteDir("/")==false)
{
dump(L"changeremote to / fails", ftp, true);
return 1;
}
int nfd = ftp.get_NumFilesAndDirs();
_tprintf(L"numfilesanddirs: %i\n", nfd);
dump(L"numfilesanddirs", ftp, true);
and here is the output (the "dump" call) after numfilesaanddirs:
changeremote to /
numfilesanddirs: 0
=====numfilesanddirs=====
lasterrortext:
ChilkatLog:
NumFilesAndDirs:
DllDate: Aug 15 2013
ChilkatVersion: 9.4.1.42
UnlockPrefix: WATCHDFTP
Username: DELL7:Gert
Architecture: Little Endian; 32-bit
Language: Visual C++ 9.0
VerboseLogging: 1
FTP directory cache not fresh. Fetching dir listing...
checkDirCache_listPattern:
supportsMLSD: 0
initialGreeting: 220 Service ready for new user.
ListDir:
readFtpControlChannelReply:
rcvUntilMatchStringQP: =0A
dbReceived0:
tlsRecvAppData:
readIncomingTls_appData:
readTlsRecord:
TLS 1.0, Application, sz=48
paddingLen: 3
macLen: 20
decryptedMsg: [200 Command PBSZ okay.
]
--readTlsRecord
--readIncomingTls_appData
rcvAppData: success, nReceived = 24
--tlsRecvAppData
startIdx: 0
dbReceived: 200 Command PBSZ okay.
Found match string.
--readFtpControlChannelReply
Sent PROT P command.
readFtpControlChannelReply:
rcvUntilMatchStringQP: =0A
dbReceived0:
tlsRecvAppData:
readIncomingTls_appData:
readTlsRecord:
TLS 1.0, Application, sz=48
paddingLen: 3
macLen: 20
decryptedMsg: [200 Command PROT okay.
]
--readTlsRecord
--readIncomingTls_appData
rcvAppData: success, nReceived = 24
--tlsRecvAppData
startIdx: 0
dbReceived: 200 Command PROT okay.
Found match string.
--readFtpControlChannelReply
ProtPResponse: 200 Command PROT okay.
Passive transfer mode
setupPassiveDataSocket1:
readFtpControlChannelReply:
rcvUntilMatchStringQP: =0A
dbReceived0:
tlsRecvAppData:
readIncomingTls_appData:
readTlsRecord:
TLS 1.0, Application, sz=80
paddingLen: 9
macLen: 20
decryptedMsg: [227 Entering Passive Mode (195,68,89,204,121,73)
]
--readTlsRecord
--readIncomingTls_appData
rcvAppData: success, nReceived = 50
--tlsRecvAppData
startIdx: 0
dbReceived: 227 Entering Passive Mode (195,68,89,204,121,73)
Found match string.
--readFtpControlChannelReply
hostAddr: 195.68.89.204
DataConnect:
hostname: 195.68.89.204
port: 31049
ConnectTimeoutMs_1: 60000
calling ConnectSocket2
IPV6 enabled connect with NO heartbeat.
This is an IPV4 numeric address...
AddrInfoList:
AddrInfo:
ai_flags: 4
ai_family: 2
ai_socktype: 1
ai_protocol: 0
ai_addrlen: 16
ai_canonname: (NULL)
--AddrInfo
--AddrInfoList
Connect using IPV4.
ipAddress1: 195.68.89.204
myIP_3: 192.168.0.102
myPort_3: 50261
connect successful (2)
socketOptions:
SO_SNDBUF: 8192
SO_RCVBUF: 8192
TCP_NODELAY: 0
--socketOptions
--DataConnect
--setupPassiveDataSocket1
SendingFtpCommand:
sendingCommand: LIST
--SendingFtpCommand
ssl_protocol_2: 0
ConvertToTls_2:
clientHandshake:
clientHelloMajorMinorVersion: 3.1
buildClientHello:
majorVersion: 3
minorVersion: 1
numRandomBytes: 32
sessionIdSize: 0
numCipherSuites: 10
numCompressionMethods: 1
--buildClientHello
readIncomingTls_serverHello:
readTlsRecord:
TLS 1.0, Handshake, sz=2404
decryptedMsg: [=02=00=00F=03=01R-=8B_=A6=9B=10=CB4 =D0=F5y=CF=D2";=A4=DB=96=F8n=AD=C4=C9=C3=95=FA=AA=8Bk=9E R-=8B_=F9,=9B=0D=06/=877=87=90=ACC=99=96=89=F4=9C:Q"=DDi;=8C=EF)=0C=CD=005=00=0B=00 =12=00 =0F=00=0500=82=05,0=82=04=14=A0=03=02=01=02=02=03=07=E0=0C0=0D=06 *=86H=86=F7=0D=01=01=05=05=000<1=0B0 =06=03U=04=06=13=02US1=170=15=06=03U=04=0A=13=0EGeoTrust, Inc.1=140=12=06=03U=04=03=13=0BRapidSSL CA0=1E=17=0D120820101450Z=17=0D140823091126Z0=81=C21)0'=06=03U=04=05=13 tr2ovUgFIliW3ALfcKBvZbUalXrEDtC]
--readTlsRecord
processTlsRecord:
processHandshake:
handshakeMessageType: ServerHello
handshakeMessageLen: 0x46
handshakeMessageLen: 70
nBytesLeft: 2400
processHandshakeMessage:
MessageType: ServerHello
Processing ServerHello...
ServerHello:
MajorVersion: 3
MinorVersion: 1
SessionIdLen: 32
CipherSuite: RSA_WITH_AES_256_CBC_SHA
CipherSuite: 00,35
CompressionMethod: 0
Queueing ServerHello message.
ServerHello is OK.
--ServerHello
--processHandshakeMessage
handshakeMessageType: Certificate
handshakeMessageLen: 0x912
handshakeMessageLen: 2322
nBytesLeft: 2326
processHandshakeMessage:
MessageType: Certificate
ProcessCertificates:
Certificate:
derSize: 1328
certSubjectCN: easyftp.????????
certSerial: 07E00C
certIssuerCN: RapidSSL CA
--Certificate
Certificate:
derSize: 985
certSubjectCN: RapidSSL CA
certSerial: 0236D1
certIssuerCN: GeoTrust Global CA
--Certificate
NumCertificates: 2
Queueing Certificates message...
--ProcessCertificates
--processHandshakeMessage
handshakeMessageType: ServerHelloDone
handshakeMessageLen: 0x0
handshakeMessageLen: 0
nBytesLeft: 0
processHandshakeMessage:
MessageType: ServerHelloDone
Queueing HelloDone message.
--processHandshakeMessage
--processHandshake
--processTlsRecord
--readIncomingTls_serverHello
HandshakeQueue:
MessageType: ServerHello
MessageType: Certificate
MessageType: ServerHelloDone
--HandshakeQueue
Dequeued ServerHello message.
Dequeued Certificate message.
DequeuedMessageType: ServerHelloDone
OK to ServerHelloDone!
No client certificate required by the server.
Encrypted pre-master secret with server certificate RSA public key is OK.
Sending ClientKeyExchange...
Sent ClientKeyExchange message.
Sending ChangeCipherSpec...
Sent ChangeCipherSpec message.
Derived keys.
Installed new outgoing security params.
Sending FINISHED message..
algorithm: aes
keyLength: 256
Sent FINISHED message..
readIncomingTls_changeCipherSpec2:
readTlsRecord:
TLS 1.0, ChangeCipherSpec, sz=1
decryptedMsg: [=01]
--readTlsRecord
processTlsRecord:
processChangeCipherSpec:
ccsProtocolType: 1
--processChangeCipherSpec
--processTlsRecord
--readIncomingTls_changeCipherSpec2
readIncomingTls_handshakeFinished2:
readTlsRecord:
TLS 1.0, Handshake, sz=48
paddingLen: 11
macLen: 20
decryptedMsg: [=14=00=00=0C/gh=1DW=C5a=A7=DF=7F=F9=86]
--readTlsRecord
processTlsRecord:
processHandshake:
handshakeMessageType: HandshakeFinished
handshakeMessageLen: 0xc
handshakeMessageLen: 12
nBytesLeft: 12
processHandshakeMessage:
MessageType: HandshakeFinished
FinishedMsgLen: 12
Queueing Finished message.
--processHandshakeMessage
--processHandshake
--processTlsRecord
--readIncomingTls_handshakeFinished2
Dequeue the FINISHED message...
Dequeued Finished message.
Handshake completed successfully.
--clientHandshake
Secure Channel Established.
--ConvertToTls_2
ReadInitialReply2:
readFtpControlChannelReply:
rcvUntilMatchStringQP: =0A
dbReceived0:
tlsRecvAppData:
readIncomingTls_appData:
readTlsRecord:
TLS 1.0, Application, sz=80
paddingLen: 5
macLen: 20
decryptedMsg: [150 File status okay; about to open data connection.
]
--readTlsRecord
--readIncomingTls_appData
rcvAppData: success, nReceived = 54
--tlsRecvAppData
startIdx: 0
dbReceived: 150 File status okay; about to open data connection.
Found match string.
--readFtpControlChannelReply
--ReadInitialReply2
listDirStatusCode: 150
listDirIntermediateReply: 150 File status okay; about to open data connection.
ReadFtpDataChannel:
s2_ReadMax2Output...
readIncomingTls_appData:
readTlsRecord:
TLS 1.0, Application, sz=80
paddingLen: 8
macLen: 20
decryptedMsg: [drwx------ 0 0 Sep 6 11:42 INTRUM
]
--readTlsRecord
--readIncomingTls_appData
readIncomingTls_appData:
readTlsRecord:
TLS 1.0, Alert, sz=32
paddingLen: 9
macLen: 20
decryptedMsg: [=01=00]
--readTlsRecord
processTlsRecord:
processAlert:
TlsAlert:
level: warning
descrip: close notify
--TlsAlert
--processAlert
--processTlsRecord
--readIncomingTls_appData
Received close-notify.
dirListSize: 51
--ReadFtpDataChannel
Type 0 directory listing
readFtpControlChannelReply:
rcvUntilMatchStringQP: =0A
dbReceived0:
tlsRecvAppData:
readIncomingTls_appData:
readTlsRecord:
TLS 1.0, Application, sz=64
paddingLen: 13
macLen: 20
decryptedMsg: [226 Closing data connection.
]
--readTlsRecord
--readIncomingTls_appData
rcvAppData: success, nReceived = 30
--tlsRecvAppData
startIdx: 0
dbReceived: 226 Closing data connection.
Found match string.
--readFtpControlChannelReply
ListTimeMS: 296
--ListDir
rawDirListingQP: drwx------ 0 0 Sep 6 11:42 INTRUM
--checkDirCache_listPattern
N: 0
Success.
--NumFilesAndDirs
--ChilkatLog
sessionlog:
.
CWD /
250 Directory changed to /
.
PBSZ 0
200 Command PBSZ okay.
.
PROT P
200 Command PROT okay.
.
PASV
227 Entering Passive Mode (195,68,89,204,121,73)
.
LIST
150 File status okay; about to open data connection.
(DirListingCharset: utf-8)
listing size = 51
drwx------ 0 0 Sep 6 11:42 INTRUM
226 Closing data connection.
END==numfilesanddirs=====
Thanks Gert! I'll have a look...
The problem is that the user/group fields are missing in the directory listing line. For example, this is what one would typically see:
drwxrwxr-x 2 1000 1000 4096 Sep 09 07:59 test2This is the directory listing line with the user/group fields missing:
drwx------ 0 0 Sep 9 11:23 INTRUMI'll see what I can do to handle this odd situation..
Great. In case you provide a test-build, I need VC2008, both x64 as x32 builds.
Here are new builds to try:
32-bit: http://www.chilkatsoft.com/preRelease/chilkat-9.4.1-x86-vc9.zip
64-bit: http://www.chilkatsoft.com/preRelease/chilkat-9.4.1-x86_64-vc9.zip