天天看點

通過ENV來控制資源檔案的讀取路徑

ENV的讀取可以參考之前的文章 https://blog.csdn.net/narlon/article/details/86676894

在開發過程中,讀取資源/配置檔案往往很頭疼。如果通過args參數傳遞給程式的話,會有一些缺點。首先,args參數數量如果多了,很容易出錯。其次,無法永久綁定一個目錄關系,必須每次傳args參數(如果讀取一個配置檔案,那麼這個配置檔案在哪裡,又是一樣的問題了)。

是以,我們可以采用把res路徑放到env環境變量中,然後程式擷取環境變量res路徑後,讀取對應資源檔案。這麼做,程式和路徑實際上是分離的,程式隻知道去env取路徑,并不知道具體這些路徑是啥。然後,程式通過類似dll發現的方法周遊這些路徑,查找需要的檔案。環境變量每次啟動後,都會回複之前的狀态,對測試很友好。

注冊ENV變量

這個過程可以在程式内做,也可以在外部環境做(比如bat),也可以成為系統的永久參數。

這邊示範,就把注冊的工程放到程式中。

string[] paths = new string[] {@".\ini", @"C://res"};
Environment.SetEnvironmentVariable("LDRES", string.Join(";", paths));
           

檔案探索函數

public static StreamReader GetLdReader(string fileName)
{
    var ldPath = Environment.GetEnvironmentVariable("LDRES");
    var paths = ldPath.Split(';');
    foreach (var s in paths)
    {
        var tryPath = string.Format("{0}/{1}", s, fileName);
        if (File.Exists(tryPath))
        {
            return new StreamReader(tryPath);
        }
    }
 
    return null;
}
           

調用過程

StreamReader sr = GetLdReader("a.txt");
var line = sr.ReadLine();
sr.Close();
           

隻要在LDRES這個系統env下路徑中存在a.txt,都能夠讀到這個檔案了。

繼續閱讀