c#

C# 使用 Google API 處理 Google 雲端硬碟(下)-程式篇

相關權限設定請看:C# 使用 Google API 處理 Google 雲端硬碟(上)-設定篇

 

寫了一個程式,測試一堆功能,界面如下。

 

image

 

放大左邊的界面

 

image

 

底下的程式不一一說明程式的運作,只列出各功能的副程式。

 

基本說明

 

在 Google Drive 架構中,目錄與檔案都是 File 物件。

 

目錄的 MimeType 必為 "application/vnd.google-apps.folder"。

 

目錄與檔案都有一個 id,不管目錄檔案改名或移動位置,id 是固定不變的。在同一目錄下,允許同名的檔案或目錄,因為主要的區別是 id。


 

重要度:
文章分類:

C# 使用 Google API 處理 Google 雲端硬碟(上)-設定篇

參考資料

 

使用 OAuth 2.0 存取 Google API

https://developers.google.com/identity/protocols/oauth2?hl=zh-tw

 

透過 .NET 輕鬆存取 Google API

https://developers.google.com/api-client-library/dotnet?hl=zh-tw

 

Drive API

https://developers.google.com/drive/?hl=zh-tw

 

Namespace Google.Apis.Drive.v3

https://googleapis.dev/dotnet/Google.Apis.Drive.v3/latest/api/Google.Apis.Drive.v3.html

 

取得憑證

 

註冊並登錄 https://console.cloud.google.com/

 

左上角下拉專案

 

image


 

點選「新增專案」

 

image



 

建立專案名稱

 

image

 

 

重要度:
文章分類:

WebView2 缺少 DLL 的錯誤訊息

 

本測試主要是想利用判斷 WebView2 的版本,來檢視在缺少部份 DLL 的情況下,會有什麼錯誤訊息,以判斷至少要提供哪些 DLL 給使用者。

重要度:
文章分類:

C# 使用 WebView2 元件

前言

 

若要用 C# 寫有瀏覽器界面的程式,過去是用 WebBrowser 元件,這是採用 IE 的核心。

 

在微軟放棄 IE 後,這個核心預計 2029 年也要消失了,目前微軟建議使用 WebView2 這個新元件,這是也 Edge (Chromium) 的核心,底下就是針對這個新元件做的一些測試。

 

使用者若要執行含有 WebView2 元件的程式,除了 Win11 及部份 Win10 已經內建之外,有些使用者是必須安裝 WebView Runtime,這部份在此就不多說了。

 

安裝 WebView2 元件

 

Visual Studio 中,預設是沒有 webView2 元件的。

 

在方案總管中的專案上按右鍵,選「管理 NuGet 套件」。

 

搜尋 webview2,找到 Microsoft.Web.WebView2 後,安裝它即可。

 

 

重要度:
文章分類:

在 C# 解壓縮整個檔案(可覆寫舊檔)

最近在用 C# 寫程式,處理到解壓縮的部份,雖然它有很方便的方法

 

ZipFile.ExtractToDirectory(壓縮檔, 目的目錄);

 

不過實測後,發現一個問題,若目的已有相同的檔案,則會産生錯誤,所以要自行解決這個問題。

 

我原本想過三個方法。

 

第一個是先解壓縮在其它目錄,再全部移到指定的目錄,但缺點是可能會佔用太多空間。如果原本的檔案就很大,要解開的檔案也很大,硬碟空間不夠的情況,解壓縮就會失敗,所以這個方法就先放棄了。

 

第二個方去是先逐一檢查檔案是否存在,存在就先刪除。如此一來,先把舊檔案刪掉,空間就會多一點,比較不擔心空間不夠的問題,最後再用 ZipFile.ExtractToDirectory 解壓縮至指定目錄。

 

第三個方法同上,只是突然想到,乾脆在檢查是否存在之後,就直接解壓縮該檔案,不用等到最後再全部解壓縮。

 

重要度:
文章分類:

C# 使用 HttpClient 非同步下載檔案

因為所寫的 C# 程式需要由網路下載大的檔案,但官方文件所寫的內容不夠多,所以花了點時間,研究了 HttpClient 非同步下載,並且記錄了一些資料,以供自己未來複習及提供有需要的人參考。

 

WebClient vs HttpClient

 

在微軟官方文件中,一開始有找到了 WebClient 和 HttpClient 二種類別,結果在 WebClient 的官方文件中,看到這一段:

 

 

我們不建議您將類別用於 WebClient 新的開發。 請改用 System.Net.Http.HttpClient 類別。
 

 

所以就放棄研究 WebClient,直攻 HttpClient 了。

 

HttpClient 及注意事項

 

HttpClient 雖然比 WebClient 好用,但有一些事要注意。

 

首先是不要大量使用新建立的 HttpClient,底下是官方文件的說明:

 

 

HttpClient 的目的是要具現化一次,並在應用程式的整個生命週期中重複使用。具現化每個要求的 HttpClient 類別,將會耗盡繁重負載下可用的通訊端數目。這會導致 >socketexception 錯誤。以下是正確使用 HttpClient 的範例。
 

 

 

public class GoodController : ApiController

{

    private static readonly HttpClient HttpClient;

 

    static GoodController()

    {

        HttpClient = new HttpClient();

    }

}

 

不過,在實測中,最多同時只能開啟二個連結。

 

查了不少資料,才知道有個變數 ServicePointManager.DefaultConnectionLimit,官方說明

 

 

ServicePoint 物件所允許的同時連線最大數。 ASP.NET 裝載的應用程式預設的連線限制為10,其他則為2。

 

 

所以若要多開啟幾個連結,不知如何做才好?目前我只找到二個方法:

 

1. 增加 ServicePointManager.DefaultConnectionLimit

2. HttpClient 每次都建立新物件,就沒這個問題了。

 

 

在網路上也查詢了其它文章,有人提到若用 static 的方式來執行 HttpClient ,也會有一些限制,例如長期連線時,可能因為網路上的 DNS 更新後,HttpClient 沒有更新解析 DNS,就會有問題。

 

因此有人介紹更好用的 HttpClientFactory,不過官方文件我只有查到 IHttpClientFactory,而且看起來有點複雜,反正我目前的程式不會用到大量的連線,也不會需要長時間使用,不用擔心 DNS 更新的問題,所以決定還是使用 HttpClient 即可。

 

另外,官方還有這個建議:

 

 

想要下載大量資料 (50 mb 或以上的) ,則應用程式應該串流這些下載,而不使用預設的緩衝。如果使用預設緩衝,用戶端記憶體使用量將會變得非常大,可能會大幅降低效能。

 

 

這也是我需要測試的,因為我需要下載的檔案會有超過 GB 的大小。

 

重要度:
文章分類:
電腦標籤:

C# 使用 Skin 套件讓程式更美觀 (下)

 

DarkUI

 

DarkUI 是參考此頁

 

https://ourcodeworld.com/articles/read/517/how-to-use-a-darkui-dark-user-interface-in-winforms-c-sharp

 

首先用 git clone 這個專案

 

https://github.com/RobinPerris/DarkUI.git

 

用 Visual Studio 開啟它,並且 build 它。會在 bin/Debug 中產生新的 DarkUI.dll

 

再開新專案,將此 dll 的元件加入工具箱中,會看到一堆暗色系的元件。

 

image

 

重要度:
文章分類:

C# 使用 Skin 套件讓程式更美觀 (中)

Material Skin

 

Material Skin 有不少人推薦,安裝方法同上,先在 NuGet 套件中搜尋 material skin,底下可以看到有不少種,應該是挑比較新的版本吧?我多挑幾個來試試。

 

image

 

在測試時有好幾個是無法順利安裝的,例如:

 

image

 

再把安裝好的套件一一加入工具箱中。

 

image

 

全部一一安裝時,發現會有衝突,底下改試著逐一安裝。

 

重要度:
文章分類:

C# 使用 Skin 套件讓程式更美觀 (上)

Iris Skin

 

首先建立一個專案,放上一堆元件。

 

image

 

在專案「參考」按右鍵,選取「管理 NuGet 套件」。

 

image

 

在 NuGet 套件管理員瀏覽頁上方的搜尋框中輸入「irisskin」,會找到 HiNetCloud.IrisSkin4,選擇它並在右方選擇安裝,就會安裝到專案中。

 

重要度:
文章分類:

C# WinForm 取得傳入的參數

C# WinForm 程式要取得使用者傳入的參數,可以使用

 

Environment.GetCommandLineArgs();

 

所取得的第一個元素就是執行檔的檔案名稱。

 

 

public MainForm()

{

    InitializeComponent();

    string[] args = Environment.GetCommandLineArgs();

    foreach(string s in args) {

        MessageBox.Show(s);

    }

}

 

另一種在網路上常看到的方法,就是手動在 Main 主程式的參數中加上 string[] args。

這個方式取得的參數,並不包含執行檔的檔案名稱,這是和上面方法不同的地方,在使用上要注意。

 

[STAThread]

static void Main(string[] args)

{

    foreach(string s in args) {

        MessageBox.Show(s);

    }

    Application.EnableVisualStyles();

    Application.SetCompatibleTextRenderingDefault(false);

    Application.Run(new MainForm());

}

 

 

重要度:
文章分類:
電腦標籤:

頁面

借我放一下廣告
訂閱 c#