连接ftp服务器 并且用listview控件读取服务器资源

用vb实现ftp的上传下载  Option ExplicitPublic Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _(ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _ByVal SProxyBypass As 阅读详情

//调用API 

public class Win32
        {
            public const uint SHGFI_ICON = 0x100;
            public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
            public const uint SHGFI_SMALLICON = 0x1; // 'Small icon
            [DllImport("shell32.dll", EntryPoint = "ExtractIcon")]
            public static extern int ExtractIcon(IntPtr hInst, string lpFileName, int nIndex);
            [DllImport("shell32.dll", EntryPoint = "SHGetFileInfo")]
            public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttribute, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint Flags);
            [DllImport("User32.dll", EntryPoint = "DestroyIcon")]
            public static extern int DestroyIcon(IntPtr hIcon);
            [DllImport("shell32.dll")]
            public static extern uint ExtractIconEx(string lpszFile, int nIconIndex, int[] phiconLarge, int[] phiconSmall, uint nIcons);
            [StructLayout(LayoutKind.Sequential)]
            public struct SHFILEINFO
            {
                public IntPtr hIcon;
                public IntPtr iIcon;
                public uint dwAttributes;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
                public string szDisplayName;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
                public string szTypeName;
            }         

public string FolderName="";
        private string serverIp;//ftp地址
        private string serverUser;//登录名
        private string serverPwd;//登录密码
        private static bool check=false;

private void toolStripButton1_Click(object sender, EventArgs e)//按钮事件   登录FTP 
        {
            try
            {
                        if (bc.CheckFtp(tstbHost.Text.Trim(), tstbUser.Text.Trim(), tstbPwd.Text.Trim()))
                        {
                            serverIp = tstbHost.Text.Trim();
                            serverUser = tstbUser.Text.Trim();
                            serverPwd = tstbPwd.Text.Trim();
                            tabControl2.TabPages[0].Text = "FTP服务器(" + tstbHost.Text.Trim() + ")";
                            listView2.Items.Clear();
                            bc.getFTPServerICO(imageList2, tstbHost.Text.Trim(), tstbUser.Text.Trim(), tstbPwd.Text.Trim(), listView2, "");
                            contextMenuStrip1.Items[0].Enabled = true;
                            this.Text = "HappyTime FTP V1.0-[" + tstbHost.Text + ",状态:已连接]";
                            toolStripStatusLabel3.Text = "[当前登录用户" + tstbUser.Text.Trim() + "]";

                            tscbServer.Items.Add("/" + tstbUser.Text.Trim());
                            tscbServer.SelectedIndex = 0;
                            check = true;
                        }
                        else
                        {
                            MessageBox.Show("FTP登录失败,请检查用户名和密码是否正确", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Text = "HappyTime FTP V1.0-[" + tstbHost.Text + ",状态:连接失败]";
                            toolStripStatusLabel3.Text = "";
                        }
            }
            catch
            {

            }
        }

       //检查通讯情况

        FtpWebRequest reqFTP;
        public bool CheckFtp(string DomainName, string FtpUserName, string FtpUserPwd)//验证登录用户是否合法
        {
            bool ResultValue = true;
            try
            {
                FtpWebRequest ftprequest = (FtpWebRequest)WebRequest.Create("ftp://" + DomainName);//创建FtpWebRequest对象
                ftprequest.Credentials = new NetworkCredential(FtpUserName, FtpUserPwd);//设置FTP登陆信息
                ftprequest.Method = WebRequestMethods.Ftp.ListDirectory;//发送一个请求命令
                FtpWebResponse ftpResponse = (FtpWebResponse)ftprequest.GetResponse();//响应一个请求
                ftpResponse.Close();//关闭请求
            }
            catch
            {
                ResultValue = false;
            }
            return ResultValue;
        }

//获取服务器的图标

 public void getFTPServerICO(ImageList il,string ftpip,string  user,string  pwd,ListView lv,string path)
        {
            try
            {
                string[] a;
                lv.Items.Clear();
                il.Images.Clear();
                if(path.Length==0)
                    a = GetFileList(ftpip, user, pwd);
                else
                    a= GetFileList(ftpip + "/" + path.Remove(path.LastIndexOf("/")), user, pwd);
                if (a != null)
                {
                    for (int i = 0; i < a.Length; i++)
                    {
                       
                        string[] b = a[i].ToString().Split(' ');
                        string filename = b[b.Length-1];
                        string filetype="";
                        if (a[i].IndexOf("DIR") != -1)
                        {
                            filetype = filename;
                        }
                        else
                        {
                            filetype = filename.Substring(filename.LastIndexOf("."), filename.Length - filename.LastIndexOf("."));
                        }
                        il.Images.Add(GetIconByFileType(filetype, true));
                        string[] info = new string[4];
                        FileInfo fi = new FileInfo(filename);
                        info[0] = fi.Name;
                        info[1] = GetFileSize(filename, ftpip, user, pwd, path).ToString();
                        if (a[i].IndexOf("DIR") != -1)
                        {
                            info[2] = "";
                            info[1] = "文件夹";
                        }
                        else
                        {
                            info[2] = GetFileSize(filename, ftpip, user, pwd, path).ToString();
                            info[1] = fi.Extension.ToString();
                        }
                        ListViewItem item = new ListViewItem(info, i);
                        lv.Items.Add(item);
                    }
                }
            }
            catch{}
        }

        //从ftp服务器上获得文件列表

        public string[] GetFileList(string ftpServerIP, string ftpUserID, string ftpPassword)
        {
            string[] downloadFiles;
            StringBuilder result = new StringBuilder();
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP));
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                WebResponse response = reqFTP.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("GB2312"));
                string line = reader.ReadLine();
                while (line != null)
                {
                    result.Append(line);
                    result.Append("\n");
                    line = reader.ReadLine();
                   
                }
                result.Remove(result.ToString().LastIndexOf('\n'), 1);
                reader.Close();
                response.Close();
                return result.ToString().Split('\n');
            }
            catch
            {
                downloadFiles = null;
                return downloadFiles;
            }
        }


//获取ftp文件的长度

        public long GetFileSize(string filename, string ftpserver,string ftpUserID, string ftpPassword,string path)
        {
            long filesize = 0;
            try
            {
                FileInfo fi = new FileInfo(filename);
                string uri;
                if(path.Length==0)
                    uri = "ftp://" + ftpserver + "/" + fi.Name;
                else
                    uri = "ftp://" + ftpserver + "/" +path+ fi.Name;
                Connect(uri, ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                filesize = response.ContentLength;
                return filesize;
            }
            catch
            {
                return 0;
            }
        }

 

        /// 给出文件扩展名(.*),返回相应图标
        /// 若不以"."开头则返回文件夹的图标。
        public Icon GetIconByFileType(string fileType,bool isLarge)
        {
            if(fileType == null || fileType.Equals(string.Empty)) return null;
            RegistryKey regVersion = null;
            string regFileType = null;
            string regIconString = null;
            string systemDirectory = Environment.SystemDirectory + "\\";
            if(fileType[0] == '.')
            {
                //读系统注册表中文件类型信息
                regVersion = Registry.ClassesRoot.OpenSubKey(fileType, true);
                if(regVersion != null)
                {
                    regFileType = regVersion.GetValue("") as string;
                    regVersion.Close();
                    regVersion = Registry.ClassesRoot.OpenSubKey(regFileType + @"\DefaultIcon" , true);
                    if(regVersion != null)
                    {
                        regIconString = regVersion.GetValue("") as string;
                        regVersion.Close();
                    }
                }
                if(regIconString == null)
                {
                    //没有读取到文件类型注册信息,指定为未知文件类型的图标
                    regIconString = systemDirectory +"shell32.dll,0";
                }
            }
            else
            {
                //直接指定为文件夹图标
                regIconString = systemDirectory +"shell32.dll,3";
            }
            string[] fileIcon = regIconString.Split(new char[]{','});
            if(fileIcon.Length != 2)
            {
                //系统注册表中注册的标图不能直接提取,则返回可执行文件的通用图标
                fileIcon = new string[]{systemDirectory +"shell32.dll","2"};
            }
            Icon resultIcon = null;
            try
            {
                //调用API方法读取图标
                int[] phiconLarge = new int[1];
                int[] phiconSmall = new int[1];
                uint count = Win32.ExtractIconEx(fileIcon[0],Int32.Parse(fileIcon[1]),phiconLarge,phiconSmall,1);
                IntPtr IconHnd = new IntPtr(isLarge?phiconLarge[0]:phiconSmall[0]);
                resultIcon = Icon.FromHandle(IconHnd);
            }

            catch
            {
                fileIcon = new string[] { systemDirectory + "shell32.dll", "2" };
                                //调用API方法读取图标
                int[] phiconLarge = new int[1];
                int[] phiconSmall = new int[1];
                uint count = Win32.ExtractIconEx(fileIcon[0],Int32.Parse(fileIcon[1]),phiconLarge,phiconSmall,1);
                IntPtr IconHnd = new IntPtr(isLarge?phiconLarge[0]:phiconSmall[0]);
                resultIcon = Icon.FromHandle(IconHnd);
            }
            return resultIcon;
        }

 

FTP服务的LIST指令获取的文件列表信息的解析 客户端使用LIST命令指定获取服务器端FTP共享目录(或者下面的子目录),服务器端将通过数据端口将该指定目录下的文件列表(包括子目录)信息发送给客户端。本文对该文件列表信息进行分析和解析。文件列表信息分为UNIX格式和DOS格式两种。笔者是比照了Serv-U和微软自带的FTP服务器写出本文的,也许别的服务器另有新的方式或者格式也说不定,欢迎大家补充。首先不妨来看一下UNIX格式和DOS格式下的文件 阅读详情

相关推荐

C#FTP在treeview里获取文件夹目录列表

C#FTP在treeview里获取文件夹目录列表,最新可用!!!!!

VB程序员的FTP编程指南1.7-用VB实现FTP的一个例子(大结局) (转)

VB程序员的FTP编程指南1.7-用VB实现FTP的一个例子(大结局) (转)[@more@] 专 题:用VB实现FTP的一个例子主 讲:qianqian 例程下载 这里供大家下载的是一个用VB实现FTP的一个例子,...

csobhtdx34120的博客 292

C#中使用treeview显示目录和文件的demo

C#中使用treeview显示目录和文件的demo 运行前请先在D盘下新建目录 treetest ,然后在 treetest 下新建一些目录和文件,可以创建多级目录。

ftp 获取文件、上传、下载

废话不多说,直接上代码 public class FtpHelper { private string _ip; private string _account; private string _pwd; public FtpHelper(string ip, string account, string pwd) { _ip = ip; _account = acc

IT爱好者-程序员 601

遍历FTP上的文件夹生成目录树

实现了遍历FTP磁盘目录生成一个属性结构显示

帆软 finereport FCRA 考试 题库+答案,共收录561题,大部分有答案

帆软 finereport FCRA 考试 题库+答案,共收录561题,大部分有答案 入门基础 11.多选题 以下方式中属于FineReport中预览模式的有( ) 分页预览、填报预览、新填报预览、数据分析、移动端预览 16.判断题 FineReport报表工具必须购买激活码后才能使用。 错误,可以免费获取激活码。 29.单选题 FineReport是一款利用( )语言开发的报表工具。java 41.多选题 访问帮助文档的方式有哪些?设计器中社区菜单下-帮助文档;直接访问http://help.finere

qq_37485720的博客 2万+

获取ftp服务器上文件打开命令,如何用FTP指令打开一个文本文件:如下

用FTP命令打开一个文本文件的具体方法如下:DOS下或工具下都不能直接在服务器上打开文件,一定要下载下来才能打开的!GET命令用来获取文件。如果你想在默认目录使用原始文件名下载文件,你要输入GET filename 回车 .可以只输入GET,系统会提示要下载的文件名,然后提示存储到的新文件名(及目录)。 ftp get readme.txt 200 PORT command successful....

weixin_36441329的博客 1711

AI脸部替换Roop-Unleashed,一键整合包教程

Roop-Unleashed是一个无须训练模型的深度伪造工具,专为图像和视频的面部替换而设计。它通过简洁的浏览器界面提供用户友好且跨平台的使用体验,无论用户是业余爱好者还是专业人士,都能快速上手。它无需复杂的设置即可实现高效的处理和转换,使图像和视频的编辑变得更加轻松和便捷。

m0_72580657的博客 1万+

vb打开ftp服务器文件路径,VB上传指定文件到FTP指定目录。。

该楼层疑似违规已被系统折叠隐藏此楼查看此楼目前用如下代码能够实现上传,但是不能上传到指定目录去。。怎么改变?OptionExplicitPrivateConstINTERNET_OPEN_TYPE_DIRECT=1PrivateConstscuseragent="vbwininet"PrivateConstINTERNET_FLAG_PASSIVE=&H800...

weixin_34107887的博客 841

微软登录OAuth 2.0授权流程

OAuth 2.0是一个关于授权的开放网络标准,它允许第三方应用获取用户数据,是目前最流行的授权机制。微软身份平台支持OAuth 2.0授权码流程,使得客户端应用程序能够获得对受保护资源(如网络API)的授权访问。这一流程在保障用户数据安全的前提下,实现了应用的便捷登录与数据共享。当用户在一个支持OAuth 2.0的应用上,希望使用微软账号进行登录时,OAuth 2.0授权流程即被触发。

qq_36569837的博客 4086

利用kettle进行数据库数据比对

Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。本人用的版本是6.1。 之前用kettle这个开源的ETL工具是用来做数据抽取的,这次测试有个需求,是做数据库数据的比对。验证源表到目标表的逻辑正确,从而利用源表自己写SQL逻辑,生成的结果和目标表去比对。这次想到了利用kettle的数据比较功能,来做这些数据校验。 ...

多米诺DU的专栏 1万+

vb登录ftp服务器并打开文档,VB.Net实现登陆Ftp的方法

开发环境 VB.Net2005 Windows2003'调用方式If Logined() ThenMsgBox("登陆成功")ElseMsgBox("登陆失败")End If'功能函数Imports SystemImports System.NetImports System.IOImports System.TextImports System.Net.SocketsPublic Const...

weixin_29593445的博客 580

无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测

本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。

weixin_29090089的博客 505

LabVIEW与实时目标之间的FTP文件

为此,请打开Windows的文件资源管理器窗口,然后键入ftp:// [服务器名称]或ftp:// XXXX,其中 X 表示FTP服务器的IP地址,例如cRIO控制器的IP地址。默认端口号是21。如果需要连接到运行在其他端口上或使用不同用户名或密码的FTP服务器,则可以使用以下格式将其他信息放入地址中:ftp:// [用户名]:[密码] @ftp_server_name:[端口]。需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。

bjcyck的博客 2550

SAP SEGW 事物码里的 Function Import

开放数据协议(OData)包括标准的 CRUD (创建、检索、更新和删除)操作,这些操作映射到 HTTP 方法的 POST、GET、PUT/MERGE 和 Delete 几类。此外,OData还支持进一步的服务操作:,这些操作可以由HTTP方法GET或POST调用,用于处理不能映射到标准 CRUD 操作的任何内容。通过在数据模型中创建 ,可以在 service Builder 中实现此类额外的服务操作。例如,您可以为以下自定义操作创建函数导入:Work Item confirmation检查航班的可用性虽然

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 995

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 34

VB中用inet控件通过FTP实现单个文件和多个文件的上传

来自:http://lihb810.blog.163.com/blog/static/59451162200810275926721/ 公司里有个VB开发的软件要做个ftp上传文件功能,基本实现方法如下: 1、inet控件添加:    打开VB,新建一个工程,新建一个窗体Form1,点击VB6.0上面的工程-部件-控件-选择“Microsoft Internet Tr

Simple and clear 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

vb 判断ftp服务器上文件,vb 判断ftp服务器上文件

vb 判断ftp服务器上文件 内容精选换一换打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹。浏览器设置了FTP防火墙。以设置IE浏览器为例。打开IE浏览器菜单"工具 > Internet 选项"。选择“高级”标签卡。取消勾选“使用被动FTP(用于防火墙和DSL调制解调器兼容)”。Internet 选项单击“确定”,重启IE浏览器,重试打开FTP服务器上的文件夹。安装传输工...

weixin_42366200的博客 427

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

用libcurl获取ftp服务器目录列表

#include &lt;stdio.h&gt;#include &lt;curl/curl.h&gt;/* &lt;DESC&gt; * Similar to ftpget.c but also stores the received response-lines * in a separate file using our own callback! * &lt;/DESC&gt; */sta...

杰克东的专栏 6363

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VB6.0FTP操作

' Constants - InternetOpen.lAccessType Public Const INTERNET_OPEN_TYPE_PRECONFIG As Long = 0& Public Const INTERNET_OPEN_TYPE_DIRECT As Long = 1& Public Const INTERNET_OPEN_TYPE_PROXY As Long = 3& Pub

abc221414的专栏 8022

C#杂八资料

C#杂八资料

sqlove的专栏 7850
上一篇: ListView获取指定目录下的所有文件及文件夹
下一篇: listView选择的项向上向下移动
chenyang2000
博客等级 码龄17年 35粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值