1、申 请 I D:HallDave
2、个人邮箱:szcwe126@qq.cn
3、原创技术文章:给BaiduPCS-Go写一个UI (昨天自己在CSDN上写的博客)
申请提交过一次了,不知道为啥没看到帖子,所以又发一次。
# 给BaiduPCS-Go写一个UI现在百度云下载限速使得很多用户头疼,会员一个月30不得不说有点太黑了。所以Github上就有老哥用Go语言开发了BaiduPCS-Go工具突破百度云的限速。但是对于一般的小白来说,这个工具使用太晦涩难懂了。所以我用C#给这个工具写了一个UI,添加了一些基本功能,使得使用尽量方便一点。在此文章我说一下整体的设计逻辑和代码。- **软件使用C#开发,在.Net下工作。经测试Win7~Win10下正常运行。**- **原创不易,转载的话记得标注名称HallDave,以及工具原作者iikira。**- **软件仅仅是为了技术交流以及方便大家,不涉及商业化运作和运营。**-------------------# 软件UI原工具:纯命令行,交互性不好,并且对小白来说很复杂。
本软件:设计了UI,使得主要功能操作简便。软件UI逻辑很简单,只添加了基本的功能和按钮。缺点就是还不够美观。
#功能分析和代码实现作为一个网盘下载工具,最重要的就是下载的功能实现。原工具是命令行,所以下载需要输入一串命令,比较不方便,对于小白来说更是无从下手。所以我们使用Process来创建进程并且进行交互。**登录功能:**我们创建进程后,使用参数“login”后,需要按提示输入账号密码以及验证码。[C#] 纯文本查看 复制代码
Process P = new Process();
P.StartInfo.FileName = "BaiduPCS-Go.exe";
P.StartInfo.Arguments="login";
P.Start();
**登出功能:**同理,登出也类似上面,但是我们不需要看到进程,因为这个过程不需要输入内容,所以只需要参数“logout”就行了[C#] 纯文本查看 复制代码
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("退出成功!", "提示");
}
注意此处由于使用了标准输入输出流,所以需要重定向:[C#] 纯文本查看 复制代码
P.StartInfo.RedirectStandardInput = true;
P.StartInfo.RedirectStandardOutput = true;
//原工具使用的是UTF8,所以重定向时需要指定UTF8以防止程序乱码
P.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
**显示文件:**只有一个参数“ls”,并且重定向后读取标准输出就行了。[C#] 纯文本查看 复制代码
P.StartInfo.Arguments = "ls";
P.Start();
TextBox1.Text=P.StandardOutput.ReadToEnd();
**下载文件:**下载的命令是“d File_Dir / File_Name”[C#] 纯文本查看 复制代码
P.StartInfo.Arguments = "d " + textDowns.Text;
//由于需要开到下载进程,所以让进程窗口可见
P.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
P.Start();
**切换路径:**路径切换使用“cd dir”就行了,回主目录的dir是“/”.[C#] 纯文本查看 复制代码
P.StartInfo.Arguments = "cd " + textDir.Text;
P.Start();
**截取文件(夹)名称:**这个程序最复杂也是最重要的地方就是文件名的获取。原工具使用不方便的一点也是在这里。我, 需要通过读入标准输出流,按行读入后使用string.Substring(index,length),分割出文件名。根目录下index是42,其他目录下是40.以下是分割的代码。判断当前目录的方法类似,然后添加个判断把line.Length>40就行了。[C#] 纯文本查看 复制代码
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后添加到文本框。[C#] 纯文本查看 复制代码
this.listBox1.Items.Add(line);
//由于最后一行总是显示当前目录信息也会显示到ListBox,所以删除最后一项。
this.listBox1.Items.RemoveAt(this.listBox1.Items.Count-1);
#总结本软件的设计和实现是没有什么复杂的地方的。只要善于动脑分析,每一部分都很容易实现出来。在此也感谢原作者iikira的BaiduPCS-Go。因为本软件的所有功能都是基于这个工具实现的。 作者:HallDave 2018-09-01 |