1. 程式人生 > >百度網盤不限速工具

百度網盤不限速工具

給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