TNB Library
TnbSftpFile.h
[詳解]
1#pragma once
13#include <shlobj.h>
14#include "TnbConsoleHooker.h"
15#include "TnbFileFinder.h"
16#include "TnbStrEx.h"
17#include "TnbFileName.h"
18
19
20
21//TNB Library
22namespace TNB
23{
24
25
26
47{
48public:
49
54 CSftpSession(LPCTSTR lpszWinScpPath = NULL)
55 {
56 m_winScpPath = lpszWinScpPath;
57 if ( m_winScpPath.IsEmpty() )
58 {
59 TCHAR buf[MAX_PATH];
60 #ifdef CSIDL_PROGRAM_FILESX86
61 if ( ! SUCCEEDED(::SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, NULL, 0, buf)) )
62 #endif
63 {
64 ::SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, buf);
65 }
66 CFileName fn = buf;
67 m_winScpPath = fn.GetFullShortName();
68 }
69 m_winScpPath.TrimRight(_T("\\"));
70 m_winScpPath += _T("\\");
71 }
72
75 {
76 Close();
77 }
78
89 bool Open(LPCTSTR lpszServerName, LPCTSTR lpszUserName, LPCTSTR lpszPassword, DWORD to = 10000)
90 {
91 if ( STRLIB::GetLen(lpszUserName) == 0 || STRLIB::GetLen(lpszPassword) == 0 )
92 {
93 return false;
94 }
95 Close();
96 CStr cl = m_winScpPath + _T("WinSCP\\WinSCP.com");
97 STARTUPINFO si = { 0 };
98 si.cb = sizeof(STARTUPINFO);
99 si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USECOUNTCHARS;
100 si.wShowWindow = SW_HIDE;
101 si.dwXCountChars = 256;
102 si.dwYCountChars = 10000;
103 if ( ! m_exe.Create(NULL, cl, si) )
104 {
105 cl = _T("WinSCP.com");
106 m_exe.Create(NULL, cl, si);
107 }
108 if ( m_exe.IsAlive() )
109 {
110 ::Sleep(1000);
111 if ( m_sftp.Hook(m_exe.GetProcessId()) )
112 {
113 if ( m_sftp.WaitString(_T("winscp>"), to) )
114 {
115 CStrVector vs = CStr(_T("not exist")) % _T("not exist") // 0
116 % _T("Session started.") % _T("セッションを開始しました") // 1
117 % _T("Authentication failed") % _T("認証に失敗") // 2
118 % _T("to the cache?") % _T("ホスト鍵をキャッシュに追加") // 3
119 % _T("(U)pdate") % _T("更新((U))"); // 4
120 cl.Format(_T("open %s:%s@%s\r"), lpszUserName, lpszPassword, lpszServerName);
121 m_sftp.SendString(cl);
122 int r = m_sftp.WaitStringEx(vs, to);
123 r = (r >= 0) ? (r / 2) : r;
124 if ( r == 4/*更新*/ )
125 {
126 m_sftp.SendString(_T("u"));
127 r = m_sftp.WaitStringEx(vs, 1000);
128 r = (r >= 0) ? (r / 2) : r;
129 }
130 if ( r == 3/*CopyKey*/ )
131 {
132 m_sftp.SendString(_T("y"));
133 r = m_sftp.WaitStringEx(vs, 1000);
134 r = (r >= 0) ? (r / 2) : r;
135 }
136 if ( r == 1 )
137 {
138 // 接続成功
139 m_currentLocalDir = ms_GetCurrentDir();
140 cl.Format(_T("lcd %s\r"), ms_DQ(m_currentLocalDir));
141 if ( SftpCommand(cl) && SftpCommand(_T("option confirm off\r")) )
142 {
143 return true;
144 }
145 }
146 }
147 m_sftp.SendString(_T("exit\r"));
148 m_sftp.GetString();
149 m_sftp.Unhook();
150 m_sftp.Terminate();
151 }
152 m_exe.Terminate();
153 }
154 return false;
155 }
156
161 void Close(void)
162 {
163 if ( m_sftp.IsHooked() )
164 {
165 m_sftp.SendString(_T("close\r"));
166 m_sftp.SendString(_T("exit\r"));
167 m_sftp.GetString();
168 m_sftp.Unhook();
169 m_exe.WaitForExit(5000);
170 m_exe.Terminate();
171 }
172 }
173
179 bool IsValid(void) const
180 {
181 return m_sftp.IsAlived();
182 }
183
190 bool CreateRemoteDir(LPCTSTR lpszRemoteDir)
191 {
192 CStr cl;
193 cl.Format(_T("mkdir %s\r"), ms_DQ(lpszRemoteDir));
194 return SftpCommand(cl);
195 }
196
203 bool RemoveRemoteDir(LPCTSTR lpszRemoteDir)
204 {
205 CStr cl;
206 cl.Format(_T("rmdir %s\r"), ms_DQ(lpszRemoteDir));
207 return SftpCommand(cl);
208 }
209
217 bool GetCurrentRemoteDir(CStr& _currentRemoteDir)
218 {
219 CStr cl = _T("pwd\r");
220 if ( SftpCommand(cl) )
221 {
223 loop ( i, log )
224 {
225 if ( ! log[i].IsEmpty() && log[i][0] == '/' )
226 {
227 _currentRemoteDir = log[i];
228 return true;
229 }
230 }
231 }
232 return false;
233 }
234
241 bool SetCurrentRemoteDir(LPCTSTR lpszRemoveDir)
242 {
243 CStr cl;
244 cl.Format(_T("cd %s\r"), ms_DQ(lpszRemoveDir));
245 return SftpCommand(cl);
246 }
247
256 bool GetRemoteFile(LPCTSTR lpszNewLocalFile, LPCTSTR lpszRemoteFile, DWORD to = 10000)
257 {
258 if ( ! AdjustCurrentLocalDir() )
259 {
260 return false;
261 }
262 CStr cl;
263 cl.Format(_T("get -preservetime %s %s\r"), ms_DQ(lpszRemoteFile), ms_DQ(lpszNewLocalFile));
264 return SftpCommand(cl, to);
265 }
266
275 bool PutLocalFile(LPCTSTR lpszNewRemoteFile, LPCTSTR lpszLocalFile, DWORD to = 10000)
276 {
277 if ( ! AdjustCurrentLocalDir() )
278 {
279 return false;
280 }
281 CStr cl;
282 cl.Format(_T("put -preservetime %s %s\r"), ms_DQ(lpszLocalFile), ms_DQ(lpszNewRemoteFile));
283 return SftpCommand(cl, to);
284 }
285
288 {
292 };
293
296 {
301 };
302
314 bool Synchronize(LPCTSTR lpszRemoteDir, LPCTSTR lpszLocalDir, ESyncMode mode, ESyncCriteria criteria = SyncCriteria_Both, DWORD to = 10000, LPCTSTR lpszOption = NULL)
315 {
316 m_synchronizedFiles.RemoveAll();
317 if ( ! AdjustCurrentLocalDir() )
318 {
319 return false;
320 }
321 CStr s1;
322 switch ( mode )
323 {
324 case SyncMode_Local: s1 = _T("local"); break;
325 case SyncMode_Remote: s1 = _T("remote"); break;
326 case SyncMode_Both: s1 = _T("both"); break;
327 default:
328 return false;
329 }
330 CStr s2;
331 switch ( criteria )
332 {
333 case SyncCriteria_Time: s2 = _T("-criteria=time"); break;
334 case SyncCriteria_Size: s2 = _T("-criteria=size"); break;
335 case SyncCriteria_Both: s2 = _T("-criteria=both"); break;
336 case SyncCriteria_Non: break;
337 default:
338 return false;
339 }
340 CStr s3 = lpszOption;
341 //
342 CStr cl;
343 cl.Format(_T("synchronize %s %s %s %s %s\r"), s1, s2, s3, ms_DQ(lpszLocalDir), ms_DQ(lpszRemoteDir));
344 if ( ! SftpCommand(cl, to) )
345 {
346 return false;
347 }
348 const CStrVector& log = GetLastString();
349 CStr last;
350 loop ( i, log )
351 {
352 const CStr& ss = log[i];
353 INT_PTR f = ss.Find(_T('|'));
354 if ( f >= 0 )
355 {
356 CStr s = ss.Left(f).TrimRight(_T(' '));
357 if ( last != s )
358 {
359 m_synchronizedFiles.Add(s);
360 last = s;
361 }
362 }
363 }
364 return true;
365 }
366
374 {
375 return m_synchronizedFiles;
376 }
377
384 bool DeleteRemoteFile(LPCTSTR lpszFileName)
385 {
386 CStr cl;
387 cl.Format(_T("rm %s\r"), ms_DQ(lpszFileName));
388 return SftpCommand(cl);
389 }
390
399 bool RenameRemoteFile(LPCTSTR lpszOldName, LPCTSTR lpszNewName)
400 {
401 CStr cl;
402 cl.Format(_T("rename %s %s\r") , ms_DQ(lpszOldName), ms_DQ(lpszNewName));
403 return SftpCommand(cl);
404 }
405
413 bool EnumRemoteFiles(CWorkMemT<WIN32_FIND_DATA>& _ls, LPCTSTR lpszRemoteDir = NULL)
414 {
415 CStr cl;
416 cl.Format(_T("ls %s\r"), ms_DQ(lpszRemoteDir));
417 if ( SftpCommand(cl) )
418 {
420 WIN32_FIND_DATA f = { 0 };
421 SYSTEMTIME st = { 0 };
423 loop ( i, log )
424 {
425 CStr s = log[i];
426 while ( s.Replace(_T(" "), _T(" ")) > 0 );
427 CStrVector vs = CStrOperator::SeparatePeriod(s, ' ', false);
428 if ( vs.GetSize() >= 11 )
429 {
430 // WinSCP 4.36
431 // 0 1 2 3 4 5 6 7 8 9 10
432 // -rwx------ 1 h-komatsu Domain Users 7534 Dec 22 9:04:25 2011 SILV ER.bmp
433 const CStr& attb = vs[0];
434 CStrVector mvs = CStrOperator::SeparatePeriod(vs[8], ':', false);
435 if ( mvs.GetSize() == 3 && attb.GetLength() >= 4 )
436 {
437 f.dwFileAttributes = (attb[0] == 'd') ? FILE_ATTRIBUTE_DIRECTORY : 0;
438 if ( attb[1] !='r' )
439 {
440 f.dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
441 }
442 st.wYear = down_cast<WORD>(vs[9].ToInt());
443 st.wMonth = down_cast<WORD>(ms_ToMonth(vs[6]));
444 st.wDay = down_cast<WORD>(vs[7].ToInt());
445 st.wHour = down_cast<WORD>(mvs[0].ToInt());
446 st.wMinute = down_cast<WORD>(mvs[1].ToInt());
447 st.wSecond = down_cast<WORD>(mvs[2].ToInt());
448 ::FILETIME ft;
449 ::SystemTimeToFileTime(&st, &ft);
450 ::LocalFileTimeToFileTime(&ft, &f.ftCreationTime);
451 f.ftLastAccessTime = f.ftCreationTime;
452 f.ftLastWriteTime = f.ftCreationTime;
453 f.nFileSizeLow = vs[5].ToInt();
454 //
455 CStr txt;
456 txt.Format(_T("%d:%02d:%02d %4d "), st.wHour, st.wMinute, st.wSecond, st.wYear);
457 int l = ToInt(s.Find(txt));
458 ASSERT( l != INVALID_INDEX );
459 txt = s.Mid(l + txt.GetLength() );
460 ASSERT( txt.GetLength() < MAX_PATH );
461 STRLIB::Copy(f.cFileName, txt);
462 ff.Add(f);
463 continue;
464 }
465 }
466 if ( vs.GetSize() >= 8 )
467 {
468 // WinSCP 4.37
469 // 0 1 2 3 4 5 6 7
470 // -rw-rw-rw- 0 10000000 May 21 12:43:01 2012 B.dat
471 // Drw-rw-rw- 0 0 May 21 12:43:25 2012 ..
472 const CStr& attb = vs[0];
473 CStrVector mvs = CStrOperator::SeparatePeriod(vs[5], ':', false); //時分秒
474 if ( mvs.GetSize() == 3 && attb.GetLength() >= 4 )
475 {
476 f.dwFileAttributes = ((attb[0]|0x40) == 'd') ? FILE_ATTRIBUTE_DIRECTORY : 0;
477 if ( (attb[1]|0x40) !='r' )
478 {
479 f.dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
480 }
481 st.wYear = down_cast<WORD>(vs[6].ToInt());
482 st.wMonth = down_cast<WORD>(ms_ToMonth(vs[3]));
483 st.wDay = down_cast<WORD>(vs[4].ToInt());
484 st.wHour = down_cast<WORD>(mvs[0].ToInt());
485 st.wMinute = down_cast<WORD>(mvs[1].ToInt());
486 st.wSecond = down_cast<WORD>(mvs[2].ToInt());
487 ::FILETIME ft;
488 ::SystemTimeToFileTime(&st, &ft);
489 ::LocalFileTimeToFileTime(&ft, &f.ftCreationTime);
490 f.ftLastAccessTime = f.ftCreationTime;
491 f.ftLastWriteTime = f.ftCreationTime;
492 f.nFileSizeLow = vs[2].ToInt();
493 //
494 CStr txt;
495 txt.Format(_T("%d:%02d:%02d %4d "), st.wHour, st.wMinute, st.wSecond, st.wYear);
496 int l = ToInt(s.Find(txt));
497 ASSERT( l != INVALID_INDEX );
498 txt = s.Mid(l + txt.GetLength() );
499 ASSERT( txt.GetLength() < MAX_PATH );
500 STRLIB::Copy(f.cFileName, txt);
501 ff.Add(f);
502 continue;
503 }
504 }
505 }
506 _ls.Resize(ff);
507 loop ( i, ff )
508 {
509 _ls[i] = ff[i];
510 }
511 return true;
512 }
513 return false;
514 }
515
523 bool ExistRemoteFile(WIN32_FIND_DATA& _fd, LPCTSTR lpszRemoteFile)
524 {
525 CStr rf = lpszRemoteFile;
526 rf += _T("*"); //ワイルドにする
528 if ( EnumRemoteFiles(ls, rf) )
529 {
530 loop ( i, ls.GetSize() )
531 {
532 if ( STRLIB::Compare(ls[i].cFileName, lpszRemoteFile, -1, NORM_IGNORECASE) == 0 )
533 {
534 _fd = ls[i];
535 return true;
536 }
537 }
538 }
539 return false;
540 }
541
548 bool ExistRemoteFile(LPCTSTR lpszRemoteFile)
549 {
550 WIN32_FIND_DATA fd;
551 return ExistRemoteFile(fd, lpszRemoteFile);
552 }
553
559 const CStrVector& GetLastString(void) const
560 {
561 return m_sftp.GetLastString();
562 }
563
569 void SetLastString(const CStrVector& vs)
570 {
571 m_sftp.SetLastString(vs);
572 }
573
579 static void TerminateWinscp(void)
580 {
581 CWorkMemT<DWORD> pids;
582 loop ( j, 3 )
583 {
584 if ( CProcessHandle::EnumProcesses(pids, _T("WinSCP.com")) )
585 {
586 loop ( i, pids.GetSize() )
587 {
589 }
590 }
591 if ( CProcessHandle::EnumProcesses(pids, _T("WinSCP.exe")) )
592 {
593 loop ( i, pids.GetSize() )
594 {
596 }
597 }
598 }
599 }
600
601protected:
602
610 bool SftpCommand(LPCTSTR lpszCommandLine, DWORD to = 1000)
611 {
612 CStr cl = lpszCommandLine;
613 cl.Trim(_T(' '));
614 if ( m_sftp.SendString(cl) )
615 {
616 CStrVector vs = CStr(_T("(A)bort,")) % _T("中止((A))") % _T("No session.") % _T("セッションなし") % _T("winscp>");
617 int r = m_sftp.WaitStringEx(vs, to);
618 r = (r >= 0) ? (r / 2) : r;
619 if ( r == 2/*winscp>*/ )
620 {
621 return true;
622 }
623 if ( r == 1 )
624 {
625 Close();
626 }
627 else if ( r == 0/*abort*/ )
628 {
629 m_sftp.SendString(_T("a"));
630 m_sftp.WaitString(_T("winscp>"), 1000);
631 }
632 }
633 return false;
634 }
635
643 {
644 CStr cp = ms_GetCurrentDir();
645 if ( m_currentLocalDir != cp )
646 {
647 CStr cl;
648 cl.Format(_T("lcd %s\r"), ms_DQ(cp));
649 if ( ! SftpCommand(cl) )
650 {
651 return false;
652 }
653 m_currentLocalDir = cp;
654 }
655 return true;
656 }
657
658private:
660 static CStr ms_GetCurrentDir(void)
661 {
662 CStr str;
663 DWORD dwRc = ::GetCurrentDirectory(MAX_PATH, str.GetBuffer(MAX_PATH));
664 str.ReleaseBuffer();
665 ASSERTLIB( dwRc != 0 );
666 IgnoreUnusedValue (dwRc);
667 return str;
668 }
670 static CStr ms_DQ(LPCTSTR lpsz)
671 {
672 CStr s = lpsz;
673 if ( ! s.IsEmpty() )
674 {
675 s = s.Sandwich(_T("\""), _T("\""));
676 }
677 return s;
678 }
680 static int ms_ToMonth(LPCTSTR lpsz)
681 {
682 const LPCTSTR m[] =
683 {
684 _T("jan"), _T("feb"), _T("mar"), _T("apr"),
685 _T("may"), _T("jun"), _T("jul"), _T("aug"),
686 _T("sep"), _T("oct"), _T("nov"), _T("dec")
687 };
688 CStr s = LowerString(lpsz);
689 loop ( i, countof(m) )
690 {
691 if ( s.IsEqual(m[i]) )
692 {
693 return ToInt(i + 1);
694 }
695 }
696 return -1;
697 }
698 CProcessHandle m_exe;
699 CConsoleHooker m_sftp;
700 CStr m_currentLocalDir;
701 CStr m_winScpPath;
702 CStrVector m_synchronizedFiles;
703 friend class CSftpSessionTest;
704};
705
706
707
746{
747 DEFSUPER(CAbstractFileFinder);
748public:
749
751 CSftpFileFinder(void) : _super()
752 {
753 }
754
761 {
762 Finish();
763 m_pSftp = pSftp;
764 }
765
767 virtual ~CSftpFileFinder(void)
768 {
769 OnFinish();
770 }
771
772protected:
773
781 virtual bool OnStart(WIN32_FIND_DATA& _data, LPCTSTR lpszName)
782 {
783 CStr s = lpszName;
784 s.Replace(_T('\\'), _T('/'));
785 s.Replace(_T("//"), _T("/"));
786 Finish();
787 if ( m_pSftp != NULL )
788 {
789 if ( m_pSftp->EnumRemoteFiles(m_list, s) )
790 {
791 m_pos = 0;
792 return OnNext(_data);
793 }
794 }
795 return false;
796 }
797
806 virtual bool OnNext(WIN32_FIND_DATA& _data)
807 {
808 if ( m_list.GetSize() > m_pos )
809 {
810 _data = m_list[m_pos];
811 m_pos++;
812 return true;
813 }
814 return false;
815 }
816
821 virtual void OnFinish(void)
822 {
823 m_list.Resize(0);
824 m_pos = 0;
825 }
826
827private:
828 CSftpSession* m_pSftp;
830 INDEX m_pos;
831 friend class CSftpFileFinderTest;
832};
833
834
835
836}; // TNB
837
838
839/*
840 WinSCP のコマンドリファレンス
841 http://sourceforge.jp/projects/winscp/wiki/script_commands
842 キャッシュキーの場所
843 HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\SshHostKeys
844 */
コンソールフッカーヘッダ
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
ファイル検索関係のヘッダ
ファイルネーム関係のヘッダ
文字列処理関係のヘッダ
ファイル検索抽象クラス
Definition: TnbFileFinder.h:33
void Finish(void)
[設定] 検索終了.
コンソールフッカークラス
void Unhook(void)
[設定] アンフック.
bool SendString(LPCTSTR lpsz)
[送信] 文字列送信.
void Terminate(void)
[設定] ターミネート.
bool Hook(DWORD processId)
[設定] フック.
const CStrVector & GetLastString(void) const
[取得] 取得文字列取得.
bool IsHooked(void) const
[確認] フック済み?
CStrVector GetString(void)
[取得] コンソール文字列取得.
void SetLastString(const CStrVector &vs)
[設定] 取得文字列設定.
bool IsAlived(void) const
[確認] プロセス生存確認.
bool WaitString(LPCTSTR lpsz, DWORD to)
[取得] 指定文字列待ち.
int WaitStringEx(const CStrVector &words, DWORD to)
[取得] 指定文字列待ち.
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
ファイル名管理クラス
Definition: TnbFileName.h:59
CStr GetFullShortName(void) const
[取得] FullShortName名取得
Definition: TnbFileName.h:193
プロセスハンドル管理クラス
bool Terminate(UINT uExitCode=0)
[通知] 強制終了.
static bool EnumProcesses(CWorkMemT< DWORD > &_ids)
[取得] プロセスID一覧取得
static bool TerminateProcessId(DWORD processId, UINT uExitCode=0)
[処理] プロセス終了.
DWORD GetProcessId(void) const
[取得] プロセスID取得
bool Create(LPCTSTR lpszExecName, LPCTSTR lpszCommand, STARTUPINFO &si)
[実行] プロセス実行
bool IsAlive(void) const
[確認] 起動確認.
DWORD WaitForExit(DWORD dwWait=INFINITE)
[処理] 終了待ち.
SFTP ファイル検索クラス
Definition: TnbSftpFile.h:746
CSftpFileFinder(void)
コンストラクタ
Definition: TnbSftpFile.h:751
virtual ~CSftpFileFinder(void)
デストラクタ
Definition: TnbSftpFile.h:767
void Initialize(CSftpSession *pSftp)
[設定] 初期化
Definition: TnbSftpFile.h:760
virtual void OnFinish(void)
[通知] 検索終了通知
Definition: TnbSftpFile.h:821
virtual bool OnStart(WIN32_FIND_DATA &_data, LPCTSTR lpszName)
[通知] 検索開始通知
Definition: TnbSftpFile.h:781
virtual bool OnNext(WIN32_FIND_DATA &_data)
[通知] 次検索通知
Definition: TnbSftpFile.h:806
SSH FTPセッション管理クラス
Definition: TnbSftpFile.h:47
bool GetRemoteFile(LPCTSTR lpszNewLocalFile, LPCTSTR lpszRemoteFile, DWORD to=10000)
[取得] リモートファイル取得.
Definition: TnbSftpFile.h:256
bool PutLocalFile(LPCTSTR lpszNewRemoteFile, LPCTSTR lpszLocalFile, DWORD to=10000)
[送信] ローカルファイル送信.
Definition: TnbSftpFile.h:275
bool Synchronize(LPCTSTR lpszRemoteDir, LPCTSTR lpszLocalDir, ESyncMode mode, ESyncCriteria criteria=SyncCriteria_Both, DWORD to=10000, LPCTSTR lpszOption=NULL)
[同期] ローカルとリモートの同期.
Definition: TnbSftpFile.h:314
bool CreateRemoteDir(LPCTSTR lpszRemoteDir)
[作成] リモートディレクトリ作成.
Definition: TnbSftpFile.h:190
CSftpSession(LPCTSTR lpszWinScpPath=NULL)
コンストラクタ.
Definition: TnbSftpFile.h:54
ESyncCriteria
同期基準
Definition: TnbSftpFile.h:296
@ SyncCriteria_Non
なし
Definition: TnbSftpFile.h:300
@ SyncCriteria_Both
両方
Definition: TnbSftpFile.h:299
@ SyncCriteria_Time
時間
Definition: TnbSftpFile.h:297
@ SyncCriteria_Size
ファイルサイズ
Definition: TnbSftpFile.h:298
ESyncMode
同期モード
Definition: TnbSftpFile.h:288
@ SyncMode_Local
リモートからローカルへの同期
Definition: TnbSftpFile.h:289
@ SyncMode_Remote
ローカルからリモートへの同期
Definition: TnbSftpFile.h:290
@ SyncMode_Both
両方
Definition: TnbSftpFile.h:291
~CSftpSession(void)
デストラクタ
Definition: TnbSftpFile.h:74
bool ExistRemoteFile(WIN32_FIND_DATA &_fd, LPCTSTR lpszRemoteFile)
[確認] ファイル有無.
Definition: TnbSftpFile.h:523
bool GetCurrentRemoteDir(CStr &_currentRemoteDir)
[取得] カレントリモートディレクトリ取得.
Definition: TnbSftpFile.h:217
bool RenameRemoteFile(LPCTSTR lpszOldName, LPCTSTR lpszNewName)
[変更] 名前変更.
Definition: TnbSftpFile.h:399
bool IsValid(void) const
[確認] ハンドル有効確認
Definition: TnbSftpFile.h:179
const CStrVector & GetLastString(void) const
[取得] 取得文字列取得.
Definition: TnbSftpFile.h:559
bool SftpCommand(LPCTSTR lpszCommandLine, DWORD to=1000)
[実行] SFTP コマンドライン実行.
Definition: TnbSftpFile.h:610
bool ExistRemoteFile(LPCTSTR lpszRemoteFile)
[確認] ファイル有無.
Definition: TnbSftpFile.h:548
const CStrVector & GetSynchronizedFiles(void) const
[取得] 同期結果ファイル名取得.
Definition: TnbSftpFile.h:373
void Close(void)
[設定] クローズ.
Definition: TnbSftpFile.h:161
bool AdjustCurrentLocalDir(void)
[実行] カレントローカルディレクトリ調整.
Definition: TnbSftpFile.h:642
void SetLastString(const CStrVector &vs)
[設定] 取得文字列設定.
Definition: TnbSftpFile.h:569
bool RemoveRemoteDir(LPCTSTR lpszRemoteDir)
[削除] リモートディレクトリ削除.
Definition: TnbSftpFile.h:203
bool Open(LPCTSTR lpszServerName, LPCTSTR lpszUserName, LPCTSTR lpszPassword, DWORD to=10000)
[設定] オープン.
Definition: TnbSftpFile.h:89
bool EnumRemoteFiles(CWorkMemT< WIN32_FIND_DATA > &_ls, LPCTSTR lpszRemoteDir=NULL)
[取得] ファイル一覧.
Definition: TnbSftpFile.h:413
static void TerminateWinscp(void)
[設定] 強制終了 WinSCP.
Definition: TnbSftpFile.h:579
bool SetCurrentRemoteDir(LPCTSTR lpszRemoveDir)
[設定] カレントリモートディレクトリ設定.
Definition: TnbSftpFile.h:241
bool DeleteRemoteFile(LPCTSTR lpszFileName)
[削除] 指定リモートファイル削除.
Definition: TnbSftpFile.h:384
static CVectorT< CStrT< TYP > > SeparatePeriod(const TYP *lpsz, const TYP *lpszMark, bool isCheckDc=true)
[取得] トークン区切取得
bool IsEmpty(void) const
[確認] 空チェック
Definition: TnbStr.h:528
CStrT Left(size_t iSize) const
[作成] 範囲取得.
Definition: TnbStr.h:801
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
Definition: TnbStr.h:954
size_t GetLength(void) const
[取得] 文字列長
Definition: TnbStr.h:518
INT_PTR Find(TYP t, INDEX iFromIndex=0) const
[確認] 検索.
Definition: TnbStr.h:540
CStrT & TrimRight(TYP t=' ')
[処理] 末尾から文字をトリム.
Definition: TnbStr.h:990
bool IsEqual(const TYP *lpszSubject) const
[確認] 文字列比較
Definition: TnbStr.h:669
CStrT & Trim(TYP t=' ')
[処理] 両端から文字をトリム.
Definition: TnbStr.h:1012
int Replace(TYP tOld, TYP tNew)
[処理] 文字置換.
Definition: TnbStr.h:1038
CStrT Sandwich(const TYP *lpszBefore, const TYP *lpszAfter) const
[作成] 前後連結.
Definition: TnbStr.h:827
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
Definition: TnbStr.h:359
CStrT Mid(INDEX iOffset, size_t iSize=INVALID_SIZE) const
[作成] 範囲取得.
Definition: TnbStr.h:766
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
Definition: TnbStr.h:914
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual bool RemoveAll(void)
[削除] 空化
Definition: TnbVector.h:565
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbDef.h:665
void Resize(size_t l)
[設定] サイズ再設定
Definition: TnbDef.h:672
int Compare(LPCSTR P1, LPCSTR P2, INT_PTR len=-1, DWORD dwCmpFlags=0)
[比較] 文字列比較(ASCII/SJIS用)
Definition: TnbStrLib.h:135
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
Definition: TnbStrLib.h:44
TNB::CStrT< TCHAR > CStr
文字列クラス
Definition: TnbStr.h:1785
CAscii LowerString(LPCSTR lpsz)
[変換] 小文字変換(ASCII/SJIS用)
Definition: TnbStrEx.h:221
void Copy(LPSTR _dst, LPCSTR src)
[複製] 文字列コピー(ASCII/SJIS用)
Definition: TnbStrLib.h:89
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:367
void IgnoreUnusedValue(const T &value)
[宣言] 参照しない値宣言.
Definition: TnbDef.h:434
TNB Library
Definition: TnbDoxyTitle.txt:2
ファイルタイム型.
Definition: TnbTime.h:893
システムタイム型.
Definition: TnbTime.h:876
WORD wYear
Definition: TnbTime.h:877
WORD wSecond
Definition: TnbTime.h:883
WORD wMonth
Definition: TnbTime.h:878
WORD wHour
Definition: TnbTime.h:881
WORD wDay
Definition: TnbTime.h:880
WORD wMinute
Definition: TnbTime.h:882