FFFTPのソースコードです。
修订版 | ef527428cc012bea08aa748a53fd2fe8d686c880 (tree) |
---|---|
时间 | 2017-11-14 16:35:10 |
作者 | t.masuda <masuda@moon...> |
Commiter | t.masuda |
SSH.NET を使った FFFTP もどき(SSFTP)を試しに追加
@@ -10,65 +10,66 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FFFTP2", "src\FFFTP2\FFFTP2 | ||
10 | 10 | EndProject |
11 | 11 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{BE63F71B-1E19-4665-B072-4812AAB9E0F0}" |
12 | 12 | EndProject |
13 | -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MFCApplication1", "src\MFCApplication1\MFCApplication1.vcxproj", "{E1E9344D-2109-4D0B-8541-86BC4B605F66}" | |
14 | -EndProject | |
15 | -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestList", "src\TestList\TestList.vcxproj", "{7F97790D-1955-44DF-ABC5-59B7794A9671}" | |
13 | +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSFTP", "src\SSFTP\SSFTP.csproj", "{C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}" | |
16 | 14 | EndProject |
17 | 15 | Global |
18 | 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
17 | + Debug|Any CPU = Debug|Any CPU | |
19 | 18 | Debug|Win32 = Debug|Win32 |
20 | 19 | Debug|x64 = Debug|x64 |
20 | + Release|Any CPU = Release|Any CPU | |
21 | 21 | Release|Win32 = Release|Win32 |
22 | 22 | Release|x64 = Release|x64 |
23 | 23 | EndGlobalSection |
24 | 24 | GlobalSection(ProjectConfigurationPlatforms) = postSolution |
25 | + {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Debug|Any CPU.ActiveCfg = Debug|Win32 | |
25 | 26 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Debug|Win32.ActiveCfg = Debug|Win32 |
26 | 27 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Debug|Win32.Build.0 = Debug|Win32 |
27 | 28 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Debug|x64.ActiveCfg = Debug|x64 |
28 | 29 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Debug|x64.Build.0 = Debug|x64 |
30 | + {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Release|Any CPU.ActiveCfg = Release|Win32 | |
29 | 31 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Release|Win32.ActiveCfg = Release|Win32 |
30 | 32 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Release|Win32.Build.0 = Release|Win32 |
31 | 33 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Release|x64.ActiveCfg = Release|x64 |
32 | 34 | {5D9496DB-45AF-4389-8FEE-27C9A2FA207A}.Release|x64.Build.0 = Release|x64 |
35 | + {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Debug|Any CPU.ActiveCfg = Debug|Win32 | |
33 | 36 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Debug|Win32.ActiveCfg = Debug|Win32 |
34 | 37 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Debug|Win32.Build.0 = Debug|Win32 |
35 | 38 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Debug|x64.ActiveCfg = Debug|x64 |
36 | 39 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Debug|x64.Build.0 = Debug|x64 |
40 | + {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Release|Any CPU.ActiveCfg = Release|Win32 | |
37 | 41 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Release|Win32.ActiveCfg = Release|Win32 |
38 | 42 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Release|Win32.Build.0 = Release|Win32 |
39 | 43 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Release|x64.ActiveCfg = Release|x64 |
40 | 44 | {EE7CC1BD-92A9-46D5-8270-386BD7BEEA55}.Release|x64.Build.0 = Release|x64 |
45 | + {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Debug|Any CPU.ActiveCfg = Debug|Win32 | |
41 | 46 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Debug|Win32.ActiveCfg = Debug|Win32 |
42 | 47 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Debug|Win32.Build.0 = Debug|Win32 |
43 | 48 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Debug|x64.ActiveCfg = Debug|x64 |
44 | 49 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Debug|x64.Build.0 = Debug|x64 |
50 | + {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Release|Any CPU.ActiveCfg = Release|Win32 | |
45 | 51 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Release|Win32.ActiveCfg = Release|Win32 |
46 | 52 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Release|Win32.Build.0 = Release|Win32 |
47 | 53 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Release|x64.ActiveCfg = Release|x64 |
48 | 54 | {717AD82D-B2D4-46C1-8A5E-738BB74FF512}.Release|x64.Build.0 = Release|x64 |
49 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Debug|Win32.ActiveCfg = Debug|Win32 | |
50 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Debug|Win32.Build.0 = Debug|Win32 | |
51 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Debug|x64.ActiveCfg = Debug|x64 | |
52 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Debug|x64.Build.0 = Debug|x64 | |
53 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Release|Win32.ActiveCfg = Release|Win32 | |
54 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Release|Win32.Build.0 = Release|Win32 | |
55 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Release|x64.ActiveCfg = Release|x64 | |
56 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66}.Release|x64.Build.0 = Release|x64 | |
57 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Debug|Win32.ActiveCfg = Debug|Win32 | |
58 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Debug|Win32.Build.0 = Debug|Win32 | |
59 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Debug|x64.ActiveCfg = Debug|x64 | |
60 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Debug|x64.Build.0 = Debug|x64 | |
61 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Release|Win32.ActiveCfg = Release|Win32 | |
62 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Release|Win32.Build.0 = Release|Win32 | |
63 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Release|x64.ActiveCfg = Release|x64 | |
64 | - {7F97790D-1955-44DF-ABC5-59B7794A9671}.Release|x64.Build.0 = Release|x64 | |
55 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |
56 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Debug|Any CPU.Build.0 = Debug|Any CPU | |
57 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Debug|Win32.ActiveCfg = Debug|Any CPU | |
58 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Debug|Win32.Build.0 = Debug|Any CPU | |
59 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Debug|x64.ActiveCfg = Debug|Any CPU | |
60 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Debug|x64.Build.0 = Debug|Any CPU | |
61 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Release|Any CPU.ActiveCfg = Release|Any CPU | |
62 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Release|Any CPU.Build.0 = Release|Any CPU | |
63 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Release|Win32.ActiveCfg = Release|Any CPU | |
64 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Release|Win32.Build.0 = Release|Any CPU | |
65 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Release|x64.ActiveCfg = Release|Any CPU | |
66 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}.Release|x64.Build.0 = Release|Any CPU | |
65 | 67 | EndGlobalSection |
66 | 68 | GlobalSection(SolutionProperties) = preSolution |
67 | 69 | HideSolutionNode = FALSE |
68 | 70 | EndGlobalSection |
69 | 71 | GlobalSection(NestedProjects) = preSolution |
70 | - {E1E9344D-2109-4D0B-8541-86BC4B605F66} = {BE63F71B-1E19-4665-B072-4812AAB9E0F0} | |
71 | - {7F97790D-1955-44DF-ABC5-59B7794A9671} = {BE63F71B-1E19-4665-B072-4812AAB9E0F0} | |
72 | + {C4E8882C-0A3D-4EE8-8247-E932EED5F8F1} = {BE63F71B-1E19-4665-B072-4812AAB9E0F0} | |
72 | 73 | EndGlobalSection |
73 | 74 | GlobalSection(ExtensibilityGlobals) = postSolution |
74 | 75 | SolutionGuid = {47BFCD3B-7686-4D29-BCB4-1CCBB2D3A4AD} |
@@ -91,7 +91,7 @@ | ||
91 | 91 | <PrecompiledHeader>NotUsing</PrecompiledHeader> |
92 | 92 | <WarningLevel>Level3</WarningLevel> |
93 | 93 | <Optimization>Disabled</Optimization> |
94 | - <PreprocessorDefinitions>WIN32;_WINSOCK_DEPRECATED_NO_WARNINGS;DO_NOT_REPLACE;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
94 | + <PreprocessorDefinitions>DO_NOT_REPLACE;WIN32;_WINSOCK_DEPRECATED_NO_WARNINGS;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
95 | 95 | <SDLCheck>true</SDLCheck> |
96 | 96 | <DisableSpecificWarnings>4996</DisableSpecificWarnings> |
97 | 97 | <AdditionalIncludeDirectories>..\..\contrib\openssl\include;</AdditionalIncludeDirectories> |
@@ -141,7 +141,7 @@ | ||
141 | 141 | <Optimization>MaxSpeed</Optimization> |
142 | 142 | <FunctionLevelLinking>true</FunctionLevelLinking> |
143 | 143 | <IntrinsicFunctions>true</IntrinsicFunctions> |
144 | - <PreprocessorDefinitions>WIN32;_WINSOCK_DEPRECATED_NO_WARNINGS;DO_NOT_REPLACE;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
144 | + <PreprocessorDefinitions>DO_NOT_REPLACE;WIN32;_WINSOCK_DEPRECATED_NO_WARNINGS;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
145 | 145 | <SDLCheck>true</SDLCheck> |
146 | 146 | <DisableSpecificWarnings>4996</DisableSpecificWarnings> |
147 | 147 | </ClCompile> |
@@ -99,8 +99,8 @@ void CFFFTP2View::OnInitialUpdate() | ||
99 | 99 | m_lvLocal.SetImageList(&m_imageList, LVSIL_SMALL); |
100 | 100 | m_lvRemote.SetImageList(&m_imageList, LVSIL_SMALL); |
101 | 101 | SetListImg(m_imageList.GetSafeHandle()); |
102 | - static CBitmap bmpup; bmpup.LoadBitmapA(IDB_BITMAP_UP); | |
103 | - static CBitmap bmpopen; bmpopen.LoadBitmapA(IDB_BITMAP_OPEN); | |
102 | + static CBitmap bmpup; bmpup.LoadBitmap(IDB_BITMAP_UP); | |
103 | + static CBitmap bmpopen; bmpopen.LoadBitmap(IDB_BITMAP_OPEN); | |
104 | 104 | |
105 | 105 | m_btnLocalOpen.SetBitmap(bmpopen); |
106 | 106 | m_btnRemoteOpen.SetBitmap(bmpopen); |
@@ -1,6 +1,7 @@ | ||
1 | 1 | #include "stdafx.h" |
2 | 2 | #include "FFFtpCore.h" |
3 | 3 | |
4 | +using namespace FFFtp; | |
4 | 5 | |
5 | 6 | FFFtpCore::FFFtpCore() |
6 | 7 | { |
@@ -14,11 +15,11 @@ FFFtpCore::~FFFtpCore() | ||
14 | 15 | ///////////////////////////////////////////////////////////////////////////////////// |
15 | 16 | // FFFTP通信クラス |
16 | 17 | ///////////////////////////////////////////////////////////////////////////////////// |
17 | -FFFtpSocket::FFFtpSocket() | |
18 | +FFFtpClient::FFFtpClient() | |
18 | 19 | { |
19 | 20 | } |
20 | 21 | |
21 | 22 | |
22 | -FFFtpSocket::~FFFtpSocket() | |
23 | +FFFtpClient::~FFFtpClient() | |
23 | 24 | { |
24 | 25 | } |
@@ -1,15 +1,19 @@ | ||
1 | 1 | #pragma once |
2 | -class FFFtpCore | |
3 | -{ | |
4 | -public: | |
5 | - FFFtpCore(); | |
6 | - ~FFFtpCore(); | |
7 | -}; | |
8 | - | |
9 | -class FFFtpSocket | |
10 | -{ | |
11 | -public: | |
12 | - FFFtpSocket(); | |
13 | - ~FFFtpSocket(); | |
14 | -}; | |
2 | + | |
3 | +namespace FFFtp { | |
4 | + | |
5 | + class FFFtpCore | |
6 | + { | |
7 | + public: | |
8 | + FFFtpCore(); | |
9 | + ~FFFtpCore(); | |
10 | + }; | |
11 | + | |
12 | + class FFFtpClient | |
13 | + { | |
14 | + public: | |
15 | + FFFtpClient(); | |
16 | + ~FFFtpClient(); | |
17 | + }; | |
18 | +} | |
15 | 19 |
@@ -71,9 +71,9 @@ END_INTERFACE_MAP() | ||
71 | 71 | void CHostnameDlg::OnBnClickedOk() |
72 | 72 | { |
73 | 73 | // TODO: ここにコントロール通知ハンドラー コードを追加します。 |
74 | - m_hostname.GetWindowTextA(Hostname); | |
75 | - m_user.GetWindowTextA(User); | |
76 | - m_pass.GetWindowTextA(Pass); | |
74 | + m_hostname.GetWindowText(Hostname); | |
75 | + m_user.GetWindowText(User); | |
76 | + m_pass.GetWindowText(Pass); | |
77 | 77 | Firewall = m_firewall.GetCheck() ? true : false; |
78 | 78 | Pasv = m_pasv.GetCheck() ? true : false; |
79 | 79 |
@@ -342,7 +342,7 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) | ||
342 | 342 | // FFFTP の初期化 |
343 | 343 | /////////////////////////////////////////////////////////// |
344 | 344 | // 初期化 |
345 | - InitApp(AfxGetApp()->m_lpCmdLine, 0); | |
345 | + InitApp((LPSTR)AfxGetApp()->m_lpCmdLine, 0); | |
346 | 346 | // ソケットウィンドウを作成 |
347 | 347 | int StsSocket = MakeSocketWin(m_hWnd, AfxGetInstanceHandle()); |
348 | 348 | // FtpWndProc の設定 |
@@ -126,7 +126,7 @@ void COutputWnd::UpdateFonts() | ||
126 | 126 | |
127 | 127 | void COutputWnd::SetOutput(const char *s) { |
128 | 128 | // ::SendMessage(m_wndOutputBuild.GetSafeHwnd(), LB_ADDSTRING, NULL, (LPARAM)s); |
129 | - m_wndOutputBuild.AddString(s); | |
129 | + m_wndOutputBuild.AddString((LPCTSTR)s); | |
130 | 130 | int index = m_wndOutputBuild.GetCount() - 1; |
131 | 131 | m_wndOutputBuild.SetCurSel(index); |
132 | 132 | m_wndOutputBuild.SetTopIndex(index); |
@@ -0,0 +1,6 @@ | ||
1 | +<?xml version="1.0" encoding="utf-8" ?> | |
2 | +<configuration> | |
3 | + <startup> | |
4 | + <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> | |
5 | + </startup> | |
6 | +</configuration> | |
\ No newline at end of file |
@@ -0,0 +1,9 @@ | ||
1 | +<Application x:Class="SSFTP.App" | |
2 | + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
3 | + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
4 | + xmlns:local="clr-namespace:SSFTP" | |
5 | + StartupUri="MainWindow.xaml"> | |
6 | + <Application.Resources> | |
7 | + | |
8 | + </Application.Resources> | |
9 | +</Application> |
@@ -0,0 +1,17 @@ | ||
1 | +using System; | |
2 | +using System.Collections.Generic; | |
3 | +using System.Configuration; | |
4 | +using System.Data; | |
5 | +using System.Linq; | |
6 | +using System.Threading.Tasks; | |
7 | +using System.Windows; | |
8 | + | |
9 | +namespace SSFTP | |
10 | +{ | |
11 | + /// <summary> | |
12 | + /// App.xaml の相互作用ロジック | |
13 | + /// </summary> | |
14 | + public partial class App : Application | |
15 | + { | |
16 | + } | |
17 | +} |
@@ -0,0 +1,96 @@ | ||
1 | +<Window x:Class="SSFTP.MainWindow" | |
2 | + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
3 | + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
4 | + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |
5 | + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |
6 | + xmlns:local="clr-namespace:SSFTP" | |
7 | + mc:Ignorable="d" | |
8 | + Title="SSFTP" Height="600" Width="800"> | |
9 | + <Grid> | |
10 | + <Grid.RowDefinitions> | |
11 | + <RowDefinition Height="50"/> | |
12 | + <RowDefinition Height="*"/> | |
13 | + <RowDefinition Height="100"/> | |
14 | + </Grid.RowDefinitions> | |
15 | + <Grid> | |
16 | + <Grid.ColumnDefinitions> | |
17 | + <ColumnDefinition Width="40"/> | |
18 | + <ColumnDefinition Width="40"/> | |
19 | + <ColumnDefinition Width="40"/> | |
20 | + </Grid.ColumnDefinitions> | |
21 | + <Button Content="接" Width="30" Height="30" Click="clickConnect"/> | |
22 | + </Grid> | |
23 | + | |
24 | + <Grid Grid.Row="1"> | |
25 | + <Grid.ColumnDefinitions> | |
26 | + <ColumnDefinition Width="*"/> | |
27 | + <ColumnDefinition Width="*"/> | |
28 | + </Grid.ColumnDefinitions> | |
29 | + <Grid.RowDefinitions> | |
30 | + <RowDefinition Height="30"/> | |
31 | + <RowDefinition Height="*"/> | |
32 | + </Grid.RowDefinitions> | |
33 | + <ListView x:Name="lvLocal" Grid.Row="1" AllowDrop="True" | |
34 | + Drop="dropLocal" | |
35 | + PreviewMouseLeftButtonDown="mouseleftLocal" | |
36 | + > | |
37 | + <ListView.Resources> | |
38 | + <Style TargetType="{x:Type ListViewItem}"> | |
39 | + <EventSetter Event="MouseDoubleClick" Handler="lvLocal_MouseDoubleClick"/> | |
40 | + </Style> | |
41 | + </ListView.Resources> | |
42 | + <ListView.View> | |
43 | + <GridView> | |
44 | + <GridViewColumn Header="名前" Width="50" DisplayMemberBinding="{Binding Name}"/> | |
45 | + <GridViewColumn Header="日付" Width="50" DisplayMemberBinding="{Binding LastWriteTime }" /> | |
46 | + <GridViewColumn Header="サイズ" Width="50" DisplayMemberBinding="{Binding LengthOrDir}" /> | |
47 | + <GridViewColumn Header="種類" Width="50" DisplayMemberBinding="{Binding Ext}" /> | |
48 | + </GridView> | |
49 | + </ListView.View> | |
50 | + </ListView> | |
51 | + <ListView x:Name="lvRemote" Grid.Row="1" Grid.Column="1" AllowDrop="True" | |
52 | + Drop="dropRemote" | |
53 | + PreviewMouseLeftButtonDown="mouseleftRemote" | |
54 | + > | |
55 | + <ListView.Resources> | |
56 | + <Style TargetType="{x:Type ListViewItem}"> | |
57 | + <EventSetter Event="MouseDoubleClick" Handler="lvRemote_MouseDoubleClick"/> | |
58 | + </Style> | |
59 | + </ListView.Resources> | |
60 | + <ListView.View> | |
61 | + <GridView> | |
62 | + <GridViewColumn Header="名前" Width="50" DisplayMemberBinding="{Binding Name}"/> | |
63 | + <GridViewColumn Header="日付" Width="50" DisplayMemberBinding="{Binding LastWriteTime }" /> | |
64 | + <GridViewColumn Header="サイズ" Width="50" DisplayMemberBinding="{Binding LengthOrDir}" /> | |
65 | + <GridViewColumn Header="種類" Width="50" DisplayMemberBinding="{Binding Ext}" /> | |
66 | + <GridViewColumn Header="属性" Width="50" DisplayMemberBinding="{Binding Attr}" /> | |
67 | + <GridViewColumn Header="所有者" Width="50" DisplayMemberBinding="{Binding UserId}" /> | |
68 | + </GridView> | |
69 | + </ListView.View> | |
70 | + </ListView> | |
71 | + <Grid> | |
72 | + <Grid.ColumnDefinitions> | |
73 | + <ColumnDefinition Width="40"/> | |
74 | + <ColumnDefinition Width="40"/> | |
75 | + <ColumnDefinition Width="*"/> | |
76 | + </Grid.ColumnDefinitions> | |
77 | + <Button Content="上" Width="30" Height="30" Click="clickLocalUp"/> | |
78 | + <Button Content="開" Width="30" Height="30" Grid.Column="1"/> | |
79 | + <ComboBox x:Name="cbLocal" Grid.Column="2" ></ComboBox> | |
80 | + </Grid> | |
81 | + <Grid Grid.Column="1"> | |
82 | + <Grid.ColumnDefinitions> | |
83 | + <ColumnDefinition Width="40"/> | |
84 | + <ColumnDefinition Width="40"/> | |
85 | + <ColumnDefinition Width="*"/> | |
86 | + </Grid.ColumnDefinitions> | |
87 | + <Button Content="上" Width="30" Height="30" Click="clickRemoteUp"/> | |
88 | + <Button Content="開" Width="30" Height="30" Grid.Column="1"/> | |
89 | + <ComboBox x:Name="cbRemote" Grid.Column="2" ></ComboBox> | |
90 | + </Grid> | |
91 | + | |
92 | + </Grid> | |
93 | + <ListBox Grid.Row="2" /> | |
94 | + | |
95 | + </Grid> | |
96 | +</Window> |
@@ -0,0 +1,294 @@ | ||
1 | +using System; | |
2 | +using System.Collections.Generic; | |
3 | +using System.Linq; | |
4 | +using System.Text; | |
5 | +using System.Threading.Tasks; | |
6 | +using System.Windows; | |
7 | +using System.Windows.Controls; | |
8 | +using System.Windows.Data; | |
9 | +using System.Windows.Documents; | |
10 | +using System.Windows.Input; | |
11 | +using System.Windows.Media; | |
12 | +using System.Windows.Media.Imaging; | |
13 | +using System.Windows.Navigation; | |
14 | +using System.Windows.Shapes; | |
15 | +using Renci.SshNet; | |
16 | +using Renci.SshNet.Sftp; | |
17 | +using System.IO; | |
18 | +using System.Diagnostics; | |
19 | + | |
20 | +namespace SSFTP | |
21 | +{ | |
22 | + /// <summary> | |
23 | + /// MainWindow.xaml の相互作用ロジック | |
24 | + /// </summary> | |
25 | + public partial class MainWindow : Window | |
26 | + { | |
27 | + public MainWindow() | |
28 | + { | |
29 | + InitializeComponent(); | |
30 | + this.Loaded += MainWindow_Loaded; | |
31 | + } | |
32 | + | |
33 | + private void MainWindow_Loaded(object sender, RoutedEventArgs e) | |
34 | + { | |
35 | + // ★最初のフォルダを指定する | |
36 | + var path = @"D:\"; | |
37 | + updateLocal(path); | |
38 | + } | |
39 | + | |
40 | + SftpClient ftp; | |
41 | + private void clickConnect(object sender, RoutedEventArgs e) | |
42 | + { | |
43 | + // ★ FTP 接続するサーバー名とユーザー名/パスワードを指定する | |
44 | + ftp = new SftpClient("raspi3.local", "pi", "masuda"); | |
45 | + ftp.Connect(); | |
46 | + var path = "/home/pi"; | |
47 | + updateRemote(path); | |
48 | + } | |
49 | + | |
50 | + /// <summary> | |
51 | + /// リモートをダブルクリック | |
52 | + /// </summary> | |
53 | + /// <param name="sender"></param> | |
54 | + /// <param name="e"></param> | |
55 | + private void lvRemote_MouseDoubleClick(object sender, MouseButtonEventArgs e) | |
56 | + { | |
57 | + ListViewItem targetItem = (ListViewItem)sender; | |
58 | + var item = (SSFTPFile)targetItem.DataContext; | |
59 | + | |
60 | + var path = ""; | |
61 | + if ( item.Name == ".." ) | |
62 | + { | |
63 | + // 親フォルダへ | |
64 | + cbRemote.SelectedIndex = 1; | |
65 | + path = cbRemote.Items[1] as string; | |
66 | + } else if ( item.LengthOrDir == "<DIR>" ) | |
67 | + { | |
68 | + path = cbRemote.Text + "/" + item.Name; | |
69 | + } | |
70 | + else | |
71 | + { | |
72 | + return; | |
73 | + } | |
74 | + updateRemote(path); | |
75 | + } | |
76 | + | |
77 | + /// <summary> | |
78 | + /// ローカルをダブルクリック | |
79 | + /// </summary> | |
80 | + /// <param name="sender"></param> | |
81 | + /// <param name="e"></param> | |
82 | + private void lvLocal_MouseDoubleClick(object sender, MouseButtonEventArgs e) | |
83 | + { | |
84 | + ListViewItem targetItem = (ListViewItem)sender; | |
85 | + var item = (SSFTPFile)targetItem.DataContext; | |
86 | + | |
87 | + var path = ""; | |
88 | + if (item.Name == "..") | |
89 | + { | |
90 | + // 親フォルダへ | |
91 | + cbRemote.SelectedIndex = 1; | |
92 | + path = cbRemote.Items[1] as string; | |
93 | + } | |
94 | + else if (item.LengthOrDir == "<DIR>") | |
95 | + { | |
96 | + path = cbLocal.Text + (cbLocal.Text.EndsWith("\\")? "": "\\") + item.Name; | |
97 | + } | |
98 | + else | |
99 | + { | |
100 | + return; | |
101 | + } | |
102 | + updateLocal(path); | |
103 | + } | |
104 | + | |
105 | + /// <summary> | |
106 | + /// 親フォルダへ | |
107 | + /// </summary> | |
108 | + /// <param name="sender"></param> | |
109 | + /// <param name="e"></param> | |
110 | + private void clickLocalUp(object sender, RoutedEventArgs e) | |
111 | + { | |
112 | + // 親フォルダへ | |
113 | + cbLocal.SelectedIndex = 1; | |
114 | + var path = cbLocal.Items[1] as string; | |
115 | + updateLocal(path); | |
116 | + } | |
117 | + | |
118 | + /// <summary> | |
119 | + /// 親フォルダへ | |
120 | + /// </summary> | |
121 | + /// <param name="sender"></param> | |
122 | + /// <param name="e"></param> | |
123 | + private void clickRemoteUp(object sender, RoutedEventArgs e) | |
124 | + { | |
125 | + cbRemote.SelectedIndex = 1; | |
126 | + var path = cbRemote.Items[1] as string; | |
127 | + updateRemote(path); | |
128 | + } | |
129 | + | |
130 | + /// <summary> | |
131 | + /// リモートのListViewを更新 | |
132 | + /// </summary> | |
133 | + /// <param name="path"></param> | |
134 | + void updateRemote( string path ) | |
135 | + { | |
136 | + var items = ftp.ListDirectory(path); | |
137 | + var lst = new List<SSFTPFile>(); | |
138 | + foreach (var it in items) { lst.Add(new SSFTPFile(it)); } | |
139 | + lvRemote.ItemsSource = lst; | |
140 | + if (cbRemote.Text != path) | |
141 | + { | |
142 | + cbRemote.Items.Insert(0, path); | |
143 | + cbRemote.SelectedIndex = 0; | |
144 | + } | |
145 | + } | |
146 | + | |
147 | + /// <summary> | |
148 | + /// ローカルのListViewを更新 | |
149 | + /// </summary> | |
150 | + /// <param name="path"></param> | |
151 | + void updateLocal( string path ) | |
152 | + { | |
153 | + var files = System.IO.Directory.GetFiles(path); | |
154 | + var dirs = System.IO.Directory.GetDirectories(path); | |
155 | + var lst = new List<SSFTPFile>(); | |
156 | + foreach (var it in files) | |
157 | + { | |
158 | + var f = new SSFTPFile(); | |
159 | + var fi = new FileInfo(it); | |
160 | + f.FullName = fi.FullName; | |
161 | + f.Name = fi.Name; | |
162 | + f.LastWriteTime = fi.LastWriteTime; | |
163 | + f.Length = fi.Length; | |
164 | + f.Ext = fi.Extension; | |
165 | + lst.Add(f); | |
166 | + } | |
167 | + foreach (var it in dirs) | |
168 | + { | |
169 | + var f = new SSFTPFile(); | |
170 | + var fi = new FileInfo(it); | |
171 | + f.Name = System.IO.Path.GetFileName(it); | |
172 | + f.LastWriteTime = fi.LastWriteTime; | |
173 | + lst.Add(f); | |
174 | + } | |
175 | + | |
176 | + lvLocal.ItemsSource = lst; | |
177 | + if (path != cbLocal.Text) | |
178 | + { | |
179 | + cbLocal.Items.Insert(0, path); | |
180 | + cbLocal.SelectedIndex = 0; | |
181 | + } | |
182 | + } | |
183 | + | |
184 | + /// <summary> | |
185 | + /// ローカルへドロップ | |
186 | + /// </summary> | |
187 | + /// <param name="sender"></param> | |
188 | + /// <param name="e"></param> | |
189 | + private void dropLocal(object sender, DragEventArgs e) | |
190 | + { | |
191 | + string file = null; | |
192 | + var files = e.Data.GetData(DataFormats.FileDrop) as string[]; | |
193 | + if ( files != null ) | |
194 | + { | |
195 | + file = files[0]; | |
196 | + } | |
197 | + if (file == null) | |
198 | + { | |
199 | + file = e.Data.GetData(DataFormats.Text) as string; | |
200 | + } | |
201 | + if (file == null) return; | |
202 | + // ローカルからローカルへは禁止 | |
203 | + if (file.Substring(1, 1) == ":") return; | |
204 | + | |
205 | + // ローカルにコピーする | |
206 | + var path = cbLocal.Text; | |
207 | + var fullpath = path + "\\" + System.IO.Path.GetFileName(file); | |
208 | + using (var fs = System.IO.File.Open(fullpath, FileMode.OpenOrCreate)) | |
209 | + { | |
210 | + ftp.DownloadFile(file, fs); | |
211 | + updateLocal(path); | |
212 | + } | |
213 | + } | |
214 | + | |
215 | + /// <summary> | |
216 | + /// ローカルからドラッグ | |
217 | + /// </summary> | |
218 | + /// <param name="sender"></param> | |
219 | + /// <param name="e"></param> | |
220 | + private void mouseleftLocal(object sender, MouseButtonEventArgs e) | |
221 | + { | |
222 | + var item = lvLocal.SelectedItem as SSFTPFile; | |
223 | + if (item != null && item.FullName != null ) | |
224 | + { | |
225 | + DragDrop.DoDragDrop(lvLocal, item.FullName, DragDropEffects.Copy); | |
226 | + } | |
227 | + } | |
228 | + | |
229 | + /// <summary> | |
230 | + /// リモートへドロップ | |
231 | + /// </summary> | |
232 | + /// <param name="sender"></param> | |
233 | + /// <param name="e"></param> | |
234 | + private void dropRemote(object sender, DragEventArgs e) | |
235 | + { | |
236 | + string file = null; | |
237 | + var files = e.Data.GetData(DataFormats.FileDrop) as string[]; | |
238 | + if (files != null) | |
239 | + { | |
240 | + file = files[0]; | |
241 | + } | |
242 | + if (file == null) | |
243 | + { | |
244 | + file = e.Data.GetData(DataFormats.Text) as string; | |
245 | + } | |
246 | + if (file == null) return; | |
247 | + // リモートからリモートへは禁止 | |
248 | + if (file.StartsWith("/")) return; | |
249 | + // リモートへコピーする | |
250 | + | |
251 | + | |
252 | + using (var fs = System.IO.File.Open(file, FileMode.Open)) | |
253 | + { | |
254 | + var path = cbRemote.Text; | |
255 | + var fullpath = path + "/" + System.IO.Path.GetFileName(file); | |
256 | + ftp.UploadFile(fs, fullpath); | |
257 | + updateRemote(path); | |
258 | + } | |
259 | + } | |
260 | + | |
261 | + /// <summary> | |
262 | + /// リモートからドラッグ | |
263 | + /// </summary> | |
264 | + /// <param name="sender"></param> | |
265 | + /// <param name="e"></param> | |
266 | + private void mouseleftRemote(object sender, MouseButtonEventArgs e) | |
267 | + { | |
268 | + var item = lvRemote.SelectedItem as SSFTPFile; | |
269 | + if (item != null && item.FullName != null) | |
270 | + { | |
271 | + DragDrop.DoDragDrop(lvLocal, item.FullName, DragDropEffects.Copy); | |
272 | + } | |
273 | + } | |
274 | + } | |
275 | + public class SSFTPFile | |
276 | + { | |
277 | + public SSFTPFile() { } | |
278 | + public SSFTPFile( SftpFile file ) | |
279 | + { | |
280 | + this.FullName = file.FullName; | |
281 | + this.Name = file.Name; | |
282 | + this.LastWriteTime = file.LastWriteTime; | |
283 | + this.Length = file.Length; | |
284 | + this.Ext = System.IO.Path.GetExtension(this.Name); | |
285 | + } | |
286 | + public string FullName { get; set; } | |
287 | + public string Name { get; set; } | |
288 | + public DateTime LastWriteTime { get; set; } | |
289 | + public long Length { get; set; } | |
290 | + public string LengthOrDir { get { | |
291 | + return (Length == 4096 || Length == 0) ? "<DIR>" : Length.ToString(); } } | |
292 | + public string Ext { get; set; } | |
293 | + } | |
294 | +} |
@@ -0,0 +1,55 @@ | ||
1 | +using System.Reflection; | |
2 | +using System.Resources; | |
3 | +using System.Runtime.CompilerServices; | |
4 | +using System.Runtime.InteropServices; | |
5 | +using System.Windows; | |
6 | + | |
7 | +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 | |
8 | +// アセンブリに関連付けられている情報を変更するには、 | |
9 | +// これらの属性値を変更してください。 | |
10 | +[assembly: AssemblyTitle("SSFTP")] | |
11 | +[assembly: AssemblyDescription("")] | |
12 | +[assembly: AssemblyConfiguration("")] | |
13 | +[assembly: AssemblyCompany("")] | |
14 | +[assembly: AssemblyProduct("SSFTP")] | |
15 | +[assembly: AssemblyCopyright("Copyright © 2017")] | |
16 | +[assembly: AssemblyTrademark("")] | |
17 | +[assembly: AssemblyCulture("")] | |
18 | + | |
19 | +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから | |
20 | +// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 | |
21 | +// その型の ComVisible 属性を true に設定してください。 | |
22 | +[assembly: ComVisible(false)] | |
23 | + | |
24 | +//ローカライズ可能なアプリケーションのビルドを開始するには、 | |
25 | +//.csproj ファイルの <UICulture>CultureYouAreCodingWith</UICulture> を | |
26 | +//<PropertyGroup> 内部で設定します。たとえば、 | |
27 | +//ソース ファイルで英語を使用している場合、<UICulture> を en-US に設定します。次に、 | |
28 | +//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の "en-US" を | |
29 | +//プロジェクト ファイルの UICulture 設定と一致するよう更新します。 | |
30 | + | |
31 | +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] | |
32 | + | |
33 | + | |
34 | +[assembly: ThemeInfo( | |
35 | + ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所 | |
36 | + //(リソースがページ、 | |
37 | + //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます) | |
38 | + ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所 | |
39 | + //(リソースがページ、 | |
40 | + //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます) | |
41 | +)] | |
42 | + | |
43 | + | |
44 | +// アセンブリのバージョン情報は次の 4 つの値で構成されています: | |
45 | +// | |
46 | +// メジャー バージョン | |
47 | +// マイナー バージョン | |
48 | +// ビルド番号 | |
49 | +// Revision | |
50 | +// | |
51 | +// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます | |
52 | +// 既定値にすることができます: | |
53 | +// [assembly: AssemblyVersion("1.0.*")] | |
54 | +[assembly: AssemblyVersion("1.0.0.0")] | |
55 | +[assembly: AssemblyFileVersion("1.0.0.0")] |
@@ -0,0 +1,71 @@ | ||
1 | +//------------------------------------------------------------------------------ | |
2 | +// <auto-generated> | |
3 | +// このコードはツールによって生成されました。 | |
4 | +// ランタイム バージョン:4.0.30319.42000 | |
5 | +// | |
6 | +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 | |
7 | +// コードが再生成されるときに損失したりします | |
8 | +// </auto-generated> | |
9 | +//------------------------------------------------------------------------------ | |
10 | + | |
11 | +namespace SSFTP.Properties | |
12 | +{ | |
13 | + | |
14 | + | |
15 | + /// <summary> | |
16 | + /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 | |
17 | + /// </summary> | |
18 | + // このクラスは StronglyTypedResourceBuilder クラスによって ResGen | |
19 | + // または Visual Studio のようなツールを使用して自動生成されました。 | |
20 | + // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に | |
21 | + // ResGen を実行し直すか、または VS プロジェクトをリビルドします。 | |
22 | + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] | |
23 | + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |
24 | + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | |
25 | + internal class Resources | |
26 | + { | |
27 | + | |
28 | + private static global::System.Resources.ResourceManager resourceMan; | |
29 | + | |
30 | + private static global::System.Globalization.CultureInfo resourceCulture; | |
31 | + | |
32 | + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] | |
33 | + internal Resources() | |
34 | + { | |
35 | + } | |
36 | + | |
37 | + /// <summary> | |
38 | + /// このクラスで使用されるキャッシュされた ResourceManager インスタンスを返します。 | |
39 | + /// </summary> | |
40 | + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | |
41 | + internal static global::System.Resources.ResourceManager ResourceManager | |
42 | + { | |
43 | + get | |
44 | + { | |
45 | + if ((resourceMan == null)) | |
46 | + { | |
47 | + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SSFTP.Properties.Resources", typeof(Resources).Assembly); | |
48 | + resourceMan = temp; | |
49 | + } | |
50 | + return resourceMan; | |
51 | + } | |
52 | + } | |
53 | + | |
54 | + /// <summary> | |
55 | + /// 厳密に型指定されたこのリソース クラスを使用して、すべての検索リソースに対し、 | |
56 | + /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。 | |
57 | + /// </summary> | |
58 | + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | |
59 | + internal static global::System.Globalization.CultureInfo Culture | |
60 | + { | |
61 | + get | |
62 | + { | |
63 | + return resourceCulture; | |
64 | + } | |
65 | + set | |
66 | + { | |
67 | + resourceCulture = value; | |
68 | + } | |
69 | + } | |
70 | + } | |
71 | +} |
@@ -0,0 +1,117 @@ | ||
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<root> | |
3 | + <!-- | |
4 | + Microsoft ResX Schema | |
5 | + | |
6 | + Version 2.0 | |
7 | + | |
8 | + The primary goals of this format is to allow a simple XML format | |
9 | + that is mostly human readable. The generation and parsing of the | |
10 | + various data types are done through the TypeConverter classes | |
11 | + associated with the data types. | |
12 | + | |
13 | + Example: | |
14 | + | |
15 | + ... ado.net/XML headers & schema ... | |
16 | + <resheader name="resmimetype">text/microsoft-resx</resheader> | |
17 | + <resheader name="version">2.0</resheader> | |
18 | + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |
19 | + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |
20 | + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |
21 | + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |
22 | + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |
23 | + <value>[base64 mime encoded serialized .NET Framework object]</value> | |
24 | + </data> | |
25 | + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |
26 | + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |
27 | + <comment>This is a comment</comment> | |
28 | + </data> | |
29 | + | |
30 | + There are any number of "resheader" rows that contain simple | |
31 | + name/value pairs. | |
32 | + | |
33 | + Each data row contains a name, and value. The row also contains a | |
34 | + type or mimetype. Type corresponds to a .NET class that support | |
35 | + text/value conversion through the TypeConverter architecture. | |
36 | + Classes that don't support this are serialized and stored with the | |
37 | + mimetype set. | |
38 | + | |
39 | + The mimetype is used for serialized objects, and tells the | |
40 | + ResXResourceReader how to depersist the object. This is currently not | |
41 | + extensible. For a given mimetype the value must be set accordingly: | |
42 | + | |
43 | + Note - application/x-microsoft.net.object.binary.base64 is the format | |
44 | + that the ResXResourceWriter will generate, however the reader can | |
45 | + read any of the formats listed below. | |
46 | + | |
47 | + mimetype: application/x-microsoft.net.object.binary.base64 | |
48 | + value : The object must be serialized with | |
49 | + : System.Serialization.Formatters.Binary.BinaryFormatter | |
50 | + : and then encoded with base64 encoding. | |
51 | + | |
52 | + mimetype: application/x-microsoft.net.object.soap.base64 | |
53 | + value : The object must be serialized with | |
54 | + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |
55 | + : and then encoded with base64 encoding. | |
56 | + | |
57 | + mimetype: application/x-microsoft.net.object.bytearray.base64 | |
58 | + value : The object must be serialized into a byte array | |
59 | + : using a System.ComponentModel.TypeConverter | |
60 | + : and then encoded with base64 encoding. | |
61 | + --> | |
62 | + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |
63 | + <xsd:element name="root" msdata:IsDataSet="true"> | |
64 | + <xsd:complexType> | |
65 | + <xsd:choice maxOccurs="unbounded"> | |
66 | + <xsd:element name="metadata"> | |
67 | + <xsd:complexType> | |
68 | + <xsd:sequence> | |
69 | + <xsd:element name="value" type="xsd:string" minOccurs="0" /> | |
70 | + </xsd:sequence> | |
71 | + <xsd:attribute name="name" type="xsd:string" /> | |
72 | + <xsd:attribute name="type" type="xsd:string" /> | |
73 | + <xsd:attribute name="mimetype" type="xsd:string" /> | |
74 | + </xsd:complexType> | |
75 | + </xsd:element> | |
76 | + <xsd:element name="assembly"> | |
77 | + <xsd:complexType> | |
78 | + <xsd:attribute name="alias" type="xsd:string" /> | |
79 | + <xsd:attribute name="name" type="xsd:string" /> | |
80 | + </xsd:complexType> | |
81 | + </xsd:element> | |
82 | + <xsd:element name="data"> | |
83 | + <xsd:complexType> | |
84 | + <xsd:sequence> | |
85 | + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |
86 | + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |
87 | + </xsd:sequence> | |
88 | + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> | |
89 | + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |
90 | + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |
91 | + </xsd:complexType> | |
92 | + </xsd:element> | |
93 | + <xsd:element name="resheader"> | |
94 | + <xsd:complexType> | |
95 | + <xsd:sequence> | |
96 | + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |
97 | + </xsd:sequence> | |
98 | + <xsd:attribute name="name" type="xsd:string" use="required" /> | |
99 | + </xsd:complexType> | |
100 | + </xsd:element> | |
101 | + </xsd:choice> | |
102 | + </xsd:complexType> | |
103 | + </xsd:element> | |
104 | + </xsd:schema> | |
105 | + <resheader name="resmimetype"> | |
106 | + <value>text/microsoft-resx</value> | |
107 | + </resheader> | |
108 | + <resheader name="version"> | |
109 | + <value>2.0</value> | |
110 | + </resheader> | |
111 | + <resheader name="reader"> | |
112 | + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |
113 | + </resheader> | |
114 | + <resheader name="writer"> | |
115 | + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |
116 | + </resheader> | |
117 | +</root> | |
\ No newline at end of file |
@@ -0,0 +1,30 @@ | ||
1 | +//------------------------------------------------------------------------------ | |
2 | +// <auto-generated> | |
3 | +// This code was generated by a tool. | |
4 | +// Runtime Version:4.0.30319.42000 | |
5 | +// | |
6 | +// Changes to this file may cause incorrect behavior and will be lost if | |
7 | +// the code is regenerated. | |
8 | +// </auto-generated> | |
9 | +//------------------------------------------------------------------------------ | |
10 | + | |
11 | +namespace SSFTP.Properties | |
12 | +{ | |
13 | + | |
14 | + | |
15 | + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | |
16 | + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] | |
17 | + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase | |
18 | + { | |
19 | + | |
20 | + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | |
21 | + | |
22 | + public static Settings Default | |
23 | + { | |
24 | + get | |
25 | + { | |
26 | + return defaultInstance; | |
27 | + } | |
28 | + } | |
29 | + } | |
30 | +} |
@@ -0,0 +1,7 @@ | ||
1 | +<?xml version='1.0' encoding='utf-8'?> | |
2 | +<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> | |
3 | + <Profiles> | |
4 | + <Profile Name="(Default)" /> | |
5 | + </Profiles> | |
6 | + <Settings /> | |
7 | +</SettingsFile> | |
\ No newline at end of file |
@@ -0,0 +1,101 @@ | ||
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
3 | + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | |
4 | + <PropertyGroup> | |
5 | + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |
6 | + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |
7 | + <ProjectGuid>{C4E8882C-0A3D-4EE8-8247-E932EED5F8F1}</ProjectGuid> | |
8 | + <OutputType>WinExe</OutputType> | |
9 | + <RootNamespace>SSFTP</RootNamespace> | |
10 | + <AssemblyName>SSFTP</AssemblyName> | |
11 | + <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> | |
12 | + <FileAlignment>512</FileAlignment> | |
13 | + <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | |
14 | + <WarningLevel>4</WarningLevel> | |
15 | + <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | |
16 | + </PropertyGroup> | |
17 | + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |
18 | + <PlatformTarget>AnyCPU</PlatformTarget> | |
19 | + <DebugSymbols>true</DebugSymbols> | |
20 | + <DebugType>full</DebugType> | |
21 | + <Optimize>false</Optimize> | |
22 | + <OutputPath>bin\Debug\</OutputPath> | |
23 | + <DefineConstants>DEBUG;TRACE</DefineConstants> | |
24 | + <ErrorReport>prompt</ErrorReport> | |
25 | + <WarningLevel>4</WarningLevel> | |
26 | + </PropertyGroup> | |
27 | + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |
28 | + <PlatformTarget>AnyCPU</PlatformTarget> | |
29 | + <DebugType>pdbonly</DebugType> | |
30 | + <Optimize>true</Optimize> | |
31 | + <OutputPath>bin\Release\</OutputPath> | |
32 | + <DefineConstants>TRACE</DefineConstants> | |
33 | + <ErrorReport>prompt</ErrorReport> | |
34 | + <WarningLevel>4</WarningLevel> | |
35 | + </PropertyGroup> | |
36 | + <ItemGroup> | |
37 | + <Reference Include="Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL"> | |
38 | + <HintPath>..\..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath> | |
39 | + </Reference> | |
40 | + <Reference Include="System" /> | |
41 | + <Reference Include="System.Data" /> | |
42 | + <Reference Include="System.Xml" /> | |
43 | + <Reference Include="Microsoft.CSharp" /> | |
44 | + <Reference Include="System.Core" /> | |
45 | + <Reference Include="System.Xml.Linq" /> | |
46 | + <Reference Include="System.Data.DataSetExtensions" /> | |
47 | + <Reference Include="System.Net.Http" /> | |
48 | + <Reference Include="System.Xaml"> | |
49 | + <RequiredTargetFramework>4.0</RequiredTargetFramework> | |
50 | + </Reference> | |
51 | + <Reference Include="WindowsBase" /> | |
52 | + <Reference Include="PresentationCore" /> | |
53 | + <Reference Include="PresentationFramework" /> | |
54 | + </ItemGroup> | |
55 | + <ItemGroup> | |
56 | + <ApplicationDefinition Include="App.xaml"> | |
57 | + <Generator>MSBuild:Compile</Generator> | |
58 | + <SubType>Designer</SubType> | |
59 | + </ApplicationDefinition> | |
60 | + <Page Include="MainWindow.xaml"> | |
61 | + <Generator>MSBuild:Compile</Generator> | |
62 | + <SubType>Designer</SubType> | |
63 | + </Page> | |
64 | + <Compile Include="App.xaml.cs"> | |
65 | + <DependentUpon>App.xaml</DependentUpon> | |
66 | + <SubType>Code</SubType> | |
67 | + </Compile> | |
68 | + <Compile Include="MainWindow.xaml.cs"> | |
69 | + <DependentUpon>MainWindow.xaml</DependentUpon> | |
70 | + <SubType>Code</SubType> | |
71 | + </Compile> | |
72 | + </ItemGroup> | |
73 | + <ItemGroup> | |
74 | + <Compile Include="Properties\AssemblyInfo.cs"> | |
75 | + <SubType>Code</SubType> | |
76 | + </Compile> | |
77 | + <Compile Include="Properties\Resources.Designer.cs"> | |
78 | + <AutoGen>True</AutoGen> | |
79 | + <DesignTime>True</DesignTime> | |
80 | + <DependentUpon>Resources.resx</DependentUpon> | |
81 | + </Compile> | |
82 | + <Compile Include="Properties\Settings.Designer.cs"> | |
83 | + <AutoGen>True</AutoGen> | |
84 | + <DependentUpon>Settings.settings</DependentUpon> | |
85 | + <DesignTimeSharedInput>True</DesignTimeSharedInput> | |
86 | + </Compile> | |
87 | + <EmbeddedResource Include="Properties\Resources.resx"> | |
88 | + <Generator>ResXFileCodeGenerator</Generator> | |
89 | + <LastGenOutput>Resources.Designer.cs</LastGenOutput> | |
90 | + </EmbeddedResource> | |
91 | + <None Include="packages.config" /> | |
92 | + <None Include="Properties\Settings.settings"> | |
93 | + <Generator>SettingsSingleFileGenerator</Generator> | |
94 | + <LastGenOutput>Settings.Designer.cs</LastGenOutput> | |
95 | + </None> | |
96 | + </ItemGroup> | |
97 | + <ItemGroup> | |
98 | + <None Include="App.config" /> | |
99 | + </ItemGroup> | |
100 | + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |
101 | +</Project> | |
\ No newline at end of file |
@@ -0,0 +1,4 @@ | ||
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<packages> | |
3 | + <package id="SSH.NET" version="2016.1.0" targetFramework="net461" /> | |
4 | +</packages> | |
\ No newline at end of file |