百度网盘不限速工具

给BaiduPCS-Go写一个UI

现在百度云下载限速使得很多用户头疼,会员一个月30不得不说有点太黑了。所以Github上就有老哥用Go语言开发了BaiduPCS-Go工具(Github地址:https://github.com/iikira/BaiduPCS-Go)突破百度云的限速。但是对于一般的小白来说,这个工具使用太晦涩难懂了。所以我用C#给这个工具写了一个UI,添加了一些基本功能,使得使用尽量方便一点。这个项目的所有源码,我都托管在了在了Github上。地址是https://github.com/HallDaveNineteenNintysix/BaiduPCS-Go_Visible_tool 。在此文章我说一下整体的设计逻辑和代码。

  • 软件使用C#开发,在.Net下工作。经测试Win7~Win10下正常运行
  • 原创不易,转载的话记得标注名称HallDave,以及工具原作者iikira。
  • 软件仅仅是为了技术交流以及方便大家,不涉及商业化运作和运营。

软件UI

原工具:纯命令行,交互性不好,并且对小白来说很复杂。

这里写图片描述

本软件:设计了UI,使得主要功能操作简便。软件UI逻辑很简单,只添加了基本的功能和按钮。缺点就是还不够美观。
这里写图片描述

功能分析和代码实现

作为一个网盘下载工具,最重要的就是下载的功能实现。原工具是命令行,所以下载需要输入一串命令,比较不方便,对于小白来说更是无从下手。所以我们使用Process来创建进程并且进行交互。

登录功能:我们创建进程后,使用参数“login”后,需要按提示输入账号密码以及验证码。

Process P = new Process();
P.StartInfo.FileName = "BaiduPCS-Go.exe";
P.StartInfo.Arguments="login";
P.Start();

登出功能:同理,登出也类似上面,但是我们不需要看到进程,因为这个过程不需要输入内容,所以只需要参数“logout”就行了

DialogResult dr = MessageBox.Show("确认退出?", "提示", MessageBoxButtons.OKCancel);
        //确认退出
            if (dr == DialogResult.OK) {
                P.StartInfo.Arguments = "logout";
                P.StartInfo.CreateNoWindow = true;
                P.Start();
                P.StandardInput.WriteLine("y");
                P.Close();
                MessageBox.Show("退出成功!", "提示");
            } 

注意此处由于使用了标准输入输出流,所以需要重定向:

P.StartInfo.RedirectStandardInput = true;
P.StartInfo.RedirectStandardOutput = true;
//原工具使用的是UTF8,所以重定向时需要指定UTF8以防止程序乱码
P.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;

显示文件:只有一个参数“ls”,并且重定向后读取标准输出就行了。

P.StartInfo.Arguments = "ls";
P.Start();
TextBox1.Text=P.StandardOutput.ReadToEnd();

下载文件:下载的命令是“d File_Dir / File_Name”

P.StartInfo.Arguments = "d " + textDowns.Text;
//由于需要开到下载进程,所以让进程窗口可见
P.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
P.Start();

切换路径:路径切换使用“cd dir”就行了,回主目录的dir是“/”.

P.StartInfo.Arguments = "cd " + textDir.Text;
P.Start();

截取文件(夹)名称:这个程序最复杂也是最重要的地方就是文件名的获取。原工具使用不方便的一点也是在这里。我, 需要通过读入标准输出流,按行读入后使用string.Substring(index,length),分割出文件名。根目录下index是42,其他目录下是40.以下是分割的代码。判断当前目录的方法类似,然后添加个判断把line.Length>40就行了。

StringReader sr = new StringReader(FileNames);
while ((line = sr.ReadLine()) != null)
            {
            if (line.Length > 42)
            //这一行判断是否是文件名行,非文件名行length都小于42/40,因为其他行会导致Substring异常。
                        {
                            //GetFile/FolderName
                            line = line.Substring(41, line.Length - 41);
                            //从第42位截取到字符串尾部。
                        }
            }

获取文件(夹)名把得到的文件名添加到ListBox,并且在选取ListBox.Items后添加到文本框。

this.listBox1.Items.Add(line);
//由于最后一行总是显示当前目录信息也会显示到ListBox,所以删除最后一项。
this.listBox1.Items.RemoveAt(this.listBox1.Items.Count-1);

总结

本软件的设计和实现是没有什么复杂的地方的。只要善于动脑分析,每一部分都很容易实现出来。
在此也感谢原作者iikira的BaiduPCS-Go。因为本软件的所有功能都是基于这个工具实现的。

                                                                        作者:HallDave
                                                                        2018-09-01

你可能感兴趣的:(C#开发)