百度網盤不限速工具
給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