AppSettingsSection 類別

定義

提供 appSettings 組態區段的組態系統支援。 此類別無法獲得繼承。

public ref class AppSettingsSection sealed : System::Configuration::ConfigurationSection
public sealed class AppSettingsSection : System.Configuration.ConfigurationSection
type AppSettingsSection = class
    inherit ConfigurationSection
Public NotInheritable Class AppSettingsSection
Inherits ConfigurationSection
繼承

範例

下列範例示範如何在主控台應用程式中使用 AppSettingsSection 類別。 它會讀取和寫入 區段所包含的 appSettings 索引鍵/值組。 它也會示範如何存取 File 類別的 AppSettingsSection 屬性。

注意

在編譯此程序代碼之前,請在專案中新增參考以 System.Configuration.dll。

using System;
using System.Collections.Specialized;
using System.Configuration;
using System.Text;
using System.IO;

// IMPORTANT: To compile this example, you must add to the project 
// a reference to the System.Configuration assembly.
//

class UsingAppSettingsSection
{
    #region UsingAppSettingsSection

    // This function shows how to use the File property of the
    // appSettings section.
    // The File property is used to specify an auxiliary 
    // configuration file.
    // Usually you create an auxiliary file off-line to store 
    // additional settings that you can modify as needed without
    // causing an application restart,as in the case of a Web 
    // application.
    // These settings are then added to the ones defined in the
    // application configuration file.
    static void  IntializeConfigurationFile()
    {
        // Create a set of unique key/value pairs to store in
        // the appSettings section of an auxiliary configuration
        // file.
        string time1 = String.Concat(DateTime.Now.ToLongDateString(),
                               " ", DateTime.Now.ToLongTimeString());

        string time2 = String.Concat(DateTime.Now.ToLongDateString(),
                               " ", new DateTime(2009, 06, 30).ToLongTimeString());
       
        string[] buffer = {"<appSettings>",
        "<add key='AuxAppStg0' value='" + time1 + "'/>", 
        "<add key='AuxAppStg1' value='" + time2 + "'/>",
        "</appSettings>"};

        // Create an auxiliary configuration file and store the
        // appSettings defined before.
        // Note creating a file at run-time is just for demo 
        // purposes to run this example.
        File.WriteAllLines("auxiliaryFile.config", buffer);
        
        // Get the current configuration associated
        // with the application.
        System.Configuration.Configuration config =
           ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

        // Associate the auxiliary with the default
        // configuration file. 
        System.Configuration.AppSettingsSection appSettings = config.AppSettings;
        appSettings.File = "auxiliaryFile.config";
        
        // Save the configuration file.
        config.Save(ConfigurationSaveMode.Modified);

        // Force a reload in memory of the 
        // changed section.
        ConfigurationManager.RefreshSection("appSettings");
    }

    // This function shows how to write a key/value
    // pair to the appSettings section.
    static void WriteAppSettings()
    {
        try
        {
            // Get the application configuration file.
            System.Configuration.Configuration config =
               ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            // Create a unique key/value pair to add to 
            // the appSettings section.
            string keyName = "AppStg" + config.AppSettings.Settings.Count;
            string value = string.Concat(DateTime.Now.ToLongDateString(),
                           " ", DateTime.Now.ToLongTimeString());

            // Add the key/value pair to the appSettings 
            // section.
            // config.AppSettings.Settings.Add(keyName, value);
            System.Configuration.AppSettingsSection appSettings = config.AppSettings;
            appSettings.Settings.Add(keyName, value);

            // Save the configuration file.
            config.Save(ConfigurationSaveMode.Modified);

            // Force a reload in memory of the changed section.
            // This to read the section with the
            // updated values.
            ConfigurationManager.RefreshSection("appSettings");

            Console.WriteLine(
                "Added the following Key: {0} Value: {1} .", keyName, value);
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception raised: {0}",
                e.Message);
        }
    }

    // This function shows how to read the key/value
    // pairs (settings collection)contained in the 
    // appSettings section.
    static void ReadAppSettings()
    {
        try
        {

            // Get the configuration file.
            System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            // Get the appSettings section.
            System.Configuration.AppSettingsSection appSettings =
                (System.Configuration.AppSettingsSection)config.GetSection("appSettings");

            // Get the auxiliary file name.
            Console.WriteLine("Auxiliary file: {0}", config.AppSettings.File);

            // Get the settings collection (key/value pairs).
            if (appSettings.Settings.Count != 0)
            {
                foreach (string key in appSettings.Settings.AllKeys)
                {
                    string value = appSettings.Settings[key].Value;
                    Console.WriteLine("Key: {0} Value: {1}", key, value);
                }
            }
            else
            {
                Console.WriteLine("The appSettings section is empty. Write first.");
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception raised: {0}",
                e.Message);
        }
    }

    #endregion UsingAppSettingsSection

    #region ApplicationMain

    // This class obtains user's input and provide feedback.
    // It contains the application Main.
    class ApplicationMain
    {
        // Display user's menu.
        public static void UserMenu()
        {
            StringBuilder buffer = new StringBuilder();

            buffer.AppendLine("Please, make your selection.");
            buffer.AppendLine("1    -- Write appSettings section.");
            buffer.AppendLine("2    -- Read  appSettings section.");
            buffer.AppendLine("?    -- Display help.");
            buffer.AppendLine("Q,q  -- Exit the application.");

            Console.Write(buffer.ToString());
        }

        // Obtain user's input and provide
        // feedback.
        static void Main(string[] args)
        {
            // Define user selection string.
            string selection;

            // Get the name of the application.
            string appName =
              Environment.GetCommandLineArgs()[0];

            IntializeConfigurationFile();

            // Get user selection.
            while (true)
            {

                UserMenu();
                Console.Write("> ");
                selection = Console.ReadLine();
                if (!string.IsNullOrEmpty(selection))
                    break;
            }

            while (selection.ToLower() != "q")
            {
                // Process user's input.
                switch (selection)
                {
                    case "1":
                        WriteAppSettings();
                        break;

                    case "2":
                        ReadAppSettings();
                        break;

                    default:
                        UserMenu();
                        break;
                }
                Console.Write("> ");
                selection = Console.ReadLine();
            }
        }
    }
    #endregion ApplicationMain
}
Imports System.Collections.Specialized
Imports System.Configuration
Imports System.Text
Imports System.IO

' IMPORTANT: To compile this example, you must add to the project 
' a reference to the System.Configuration assembly.
'

Class UsingAppSettingsSection
#Region "UsingAppSettingsSection"

    ' This function shows how to use the File property of the
    ' appSettings section.
    ' The File property is used to specify an auxiliary 
    ' configuration file.
    ' Usually you create an auxiliary file off-line to store 
    ' additional settings that you can modify as needed without
    ' causing an application restart,as in the case of a Web 
    ' application.
    ' These settings are then added to the ones defined in the
    ' application configuration file.
    Private Shared Sub IntializeConfigurationFile()
        ' Create a set of unique key/value pairs to store in
        ' the appSettings section of an auxiliary configuration
        ' file.
        Dim time1 As String = String.Concat(Date.Now.ToLongDateString(), " ", Date.Now.ToLongTimeString())

        Dim time2 As String = String.Concat(Date.Now.ToLongDateString(), " ", New Date(2009, 6, 30).ToLongTimeString())

        Dim buffer() As String = {"<appSettings>", "<add key='AuxAppStg0' value='" & time1 & "'/>", "<add key='AuxAppStg1' value='" & time2 & "'/>", "</appSettings>"}

        ' Create an auxiliary configuration file and store the
        ' appSettings defined before.
        ' Note creating a file at run-time is just for demo 
        ' purposes to run this example.
        File.WriteAllLines("auxiliaryFile.config", buffer)

        ' Get the current configuration associated
        ' with the application.
        Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

        ' Associate the auxiliary with the default
        ' configuration file. 
        Dim appSettings As System.Configuration.AppSettingsSection = config.AppSettings
        appSettings.File = "auxiliaryFile.config"

        ' Save the configuration file.
        config.Save(ConfigurationSaveMode.Modified)

        ' Force a reload in memory of the 
        ' changed section.
        ConfigurationManager.RefreshSection("appSettings")

    End Sub

    ' This function shows how to write a key/value
    ' pair to the appSettings section.
    Private Shared Sub WriteAppSettings()
        Try
            ' Get the application configuration file.
            Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

            ' Create a unique key/value pair to add to 
            ' the appSettings section.
            Dim keyName As String = "AppStg" & config.AppSettings.Settings.Count
            Dim value As String = String.Concat(Date.Now.ToLongDateString(), " ", Date.Now.ToLongTimeString())

            ' Add the key/value pair to the appSettings 
            ' section.
            ' config.AppSettings.Settings.Add(keyName, value);
            Dim appSettings As System.Configuration.AppSettingsSection = config.AppSettings
            appSettings.Settings.Add(keyName, value)

            ' Save the configuration file.
            config.Save(ConfigurationSaveMode.Modified)

            ' Force a reload in memory of the changed section.
            ' This to read the section with the
            ' updated values.
            ConfigurationManager.RefreshSection("appSettings")

            Console.WriteLine("Added the following Key: {0} Value: {1} .", keyName, value)
        Catch e As Exception
            Console.WriteLine("Exception raised: {0}", e.Message)
        End Try
    End Sub

    ' This function shows how to read the key/value
    ' pairs (settings collection)contained in the 
    ' appSettings section.
    Private Shared Sub ReadAppSettings()
        Try

            ' Get the configuration file.
            Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

            ' Get the appSettings section.
            Dim appSettings As System.Configuration.AppSettingsSection = CType(config.GetSection("appSettings"), System.Configuration.AppSettingsSection)

            ' Get the auxiliary file name.
            Console.WriteLine("Auxiliary file: {0}", config.AppSettings.File)


            ' Get the settings collection (key/value pairs).
            If appSettings.Settings.Count <> 0 Then
                For Each key As String In appSettings.Settings.AllKeys
                    Dim value As String = appSettings.Settings(key).Value
                    Console.WriteLine("Key: {0} Value: {1}", key, value)
                Next key
            Else
                Console.WriteLine("The appSettings section is empty. Write first.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception raised: {0}", e.Message)
        End Try
    End Sub

#End Region ' UsingAppSettingsSection


#Region "ApplicationMain"

    Shared Sub UserMenu()
        Dim buffer As New StringBuilder()

        buffer.AppendLine("Please, make your selection.")
        buffer.AppendLine("1    -- Write appSettings section.")
        buffer.AppendLine("2    -- Read  appSettings section.")
        buffer.AppendLine("?    -- Display help.")
        buffer.AppendLine("Q,q  -- Exit the application.")

        Console.Write(buffer.ToString())
    End Sub

    ' Obtain user's input and provide
    ' feedback.
    Shared Sub Main(ByVal args() As String)
        ' Define user selection string.
        Dim selection As String

        ' Get the name of the application.
        Dim appName As String = Environment.GetCommandLineArgs()(0)

        IntializeConfigurationFile()

        ' Get user selection.
        Do

            UserMenu()
            Console.Write("> ")
            selection = Console.ReadLine()
            If selection <> String.Empty Then
                Exit Do
            End If
        Loop

        Do While selection.ToLower() <> "q"
            ' Process user's input.
            Select Case selection
                Case "1"
                    WriteAppSettings()

                Case "2"
                    ReadAppSettings()

                Case Else
                    UserMenu()
            End Select
            Console.Write("> ")
            selection = Console.ReadLine()
        Loop
    End Sub
    ' End Class
#End Region ' ApplicationMain
End Class
Imports System.Collections.Specialized
Imports System.Configuration
Imports System.Text
Imports System.IO

' IMPORTANT: To compile this example, you must add to the project 
' a reference to the System.Configuration assembly.
'

Class UsingAppSettingsSection
#Region "UsingAppSettingsSection"

    ' This function shows how to use the File property of the
    ' appSettings section.
    ' The File property is used to specify an auxiliary 
    ' configuration file.
    ' Usually you create an auxiliary file off-line to store 
    ' additional settings that you can modify as needed without
    ' causing an application restart,as in the case of a Web 
    ' application.
    ' These settings are then added to the ones defined in the
    ' application configuration file.
    Private Shared Sub IntializeConfigurationFile()
        ' Create a set of unique key/value pairs to store in
        ' the appSettings section of an auxiliary configuration
        ' file.
        Dim time1 As String = String.Concat(Date.Now.ToLongDateString(), " ", Date.Now.ToLongTimeString())

        Dim time2 As String = String.Concat(Date.Now.ToLongDateString(), " ", New Date(2009, 6, 30).ToLongTimeString())

        Dim buffer() As String = {"<appSettings>", "<add key='AuxAppStg0' value='" & time1 & "'/>", "<add key='AuxAppStg1' value='" & time2 & "'/>", "</appSettings>"}

        ' Create an auxiliary configuration file and store the
        ' appSettings defined before.
        ' Note creating a file at run-time is just for demo 
        ' purposes to run this example.
        File.WriteAllLines("auxiliaryFile.config", buffer)

        ' Get the current configuration associated
        ' with the application.
        Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

        ' Associate the auxiliary with the default
        ' configuration file. 
        Dim appSettings As System.Configuration.AppSettingsSection = config.AppSettings
        appSettings.File = "auxiliaryFile.config"

        ' Save the configuration file.
        config.Save(ConfigurationSaveMode.Modified)

        ' Force a reload in memory of the 
        ' changed section.
        ConfigurationManager.RefreshSection("appSettings")

    End Sub

    ' This function shows how to write a key/value
    ' pair to the appSettings section.
    Private Shared Sub WriteAppSettings()
        Try
            ' Get the application configuration file.
            Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

            ' Create a unique key/value pair to add to 
            ' the appSettings section.
            Dim keyName As String = "AppStg" & config.AppSettings.Settings.Count
            Dim value As String = String.Concat(Date.Now.ToLongDateString(), " ", Date.Now.ToLongTimeString())

            ' Add the key/value pair to the appSettings 
            ' section.
            ' config.AppSettings.Settings.Add(keyName, value);
            Dim appSettings As System.Configuration.AppSettingsSection = config.AppSettings
            appSettings.Settings.Add(keyName, value)

            ' Save the configuration file.
            config.Save(ConfigurationSaveMode.Modified)

            ' Force a reload in memory of the changed section.
            ' This to read the section with the
            ' updated values.
            ConfigurationManager.RefreshSection("appSettings")

            Console.WriteLine("Added the following Key: {0} Value: {1} .", keyName, value)
        Catch e As Exception
            Console.WriteLine("Exception raised: {0}", e.Message)
        End Try
    End Sub

    ' This function shows how to read the key/value
    ' pairs (settings collection)contained in the 
    ' appSettings section.
    Private Shared Sub ReadAppSettings()
        Try

            ' Get the configuration file.
            Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

            ' Get the appSettings section.
            Dim appSettings As System.Configuration.AppSettingsSection = CType(config.GetSection("appSettings"), System.Configuration.AppSettingsSection)

            ' Get the auxiliary file name.
            Console.WriteLine("Auxiliary file: {0}", config.AppSettings.File)


            ' Get the settings collection (key/value pairs).
            If appSettings.Settings.Count <> 0 Then
                For Each key As String In appSettings.Settings.AllKeys
                    Dim value As String = appSettings.Settings(key).Value
                    Console.WriteLine("Key: {0} Value: {1}", key, value)
                Next key
            Else
                Console.WriteLine("The appSettings section is empty. Write first.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception raised: {0}", e.Message)
        End Try
    End Sub

#End Region ' UsingAppSettingsSection


#Region "ApplicationMain"

    Shared Sub UserMenu()
        Dim buffer As New StringBuilder()

        buffer.AppendLine("Please, make your selection.")
        buffer.AppendLine("1    -- Write appSettings section.")
        buffer.AppendLine("2    -- Read  appSettings section.")
        buffer.AppendLine("?    -- Display help.")
        buffer.AppendLine("Q,q  -- Exit the application.")

        Console.Write(buffer.ToString())
    End Sub

    ' Obtain user's input and provide
    ' feedback.
    Shared Sub Main(ByVal args() As String)
        ' Define user selection string.
        Dim selection As String

        ' Get the name of the application.
        Dim appName As String = Environment.GetCommandLineArgs()(0)

        IntializeConfigurationFile()

        ' Get user selection.
        Do

            UserMenu()
            Console.Write("> ")
            selection = Console.ReadLine()
            If selection <> String.Empty Then
                Exit Do
            End If
        Loop

        Do While selection.ToLower() <> "q"
            ' Process user's input.
            Select Case selection
                Case "1"
                    WriteAppSettings()

                Case "2"
                    ReadAppSettings()

                Case Else
                    UserMenu()
            End Select
            Console.Write("> ")
            selection = Console.ReadLine()
        Loop
    End Sub
    ' End Class
#End Region ' ApplicationMain
End Class

備註

appSettings 態區段提供應用程式的索引鍵/值組 string 值。 您應該使用 AppSettings 類別的 ConfigurationManager 屬性或 AppSettings 類別的 WebConfigurationManager 屬性,而不是使用 對象的實例AppSettingsSection來存取這些值。

建構函式

AppSettingsSection()

初始化 AppSettingsSection 類別的新執行個體。

屬性

CurrentConfiguration

取得最上層 Configuration 執行個體的參考,這個執行個體表示目前 ConfigurationElement 執行個體所屬的組態階層架構。

(繼承來源 ConfigurationElement)
ElementInformation

取得 ElementInformation 物件,其中包含 ConfigurationElement 物件之不可自訂的資訊和功能。

(繼承來源 ConfigurationElement)
ElementProperty

取得表示 ConfigurationElementProperty 物件本身的 ConfigurationElement 物件。

(繼承來源 ConfigurationElement)
EvaluationContext

取得 ConfigurationElement 物件的 ContextInformation 物件。

(繼承來源 ConfigurationElement)
File

取得或設定組態檔,這個組態檔提供額外設定或覆寫 appSettings 元素中所指定的設定。

HasContext

取得值,指出 CurrentConfiguration 屬性是否為 null

(繼承來源 ConfigurationElement)
Item[ConfigurationProperty]

取得或設定此組態項目的屬性 (Property) 或屬性 (Attribute)。

(繼承來源 ConfigurationElement)
Item[String]

取得或設定此一組態項目的屬性或子項目。

(繼承來源 ConfigurationElement)
LockAllAttributesExcept

取得已鎖定屬性的集合。

(繼承來源 ConfigurationElement)
LockAllElementsExcept

取得已鎖定項目的集合。

(繼承來源 ConfigurationElement)
LockAttributes

取得已鎖定屬性的集合。

(繼承來源 ConfigurationElement)
LockElements

取得已鎖定項目的集合。

(繼承來源 ConfigurationElement)
LockItem

取得或設定值,指出此項目是否已被鎖定。

(繼承來源 ConfigurationElement)
Properties

取得屬性的集合。

(繼承來源 ConfigurationElement)
SectionInformation

取得 SectionInformation 物件,該物件包含 ConfigurationSection 物件之不可自訂的資訊和功能。

(繼承來源 ConfigurationSection)
Settings

取得包含應用程式設定的索引鍵/值組集合。

方法

DeserializeElement(XmlReader, Boolean)

從組態檔讀取 XML。

(繼承來源 ConfigurationElement)
DeserializeSection(XmlReader)

從組態檔讀取 XML。

(繼承來源 ConfigurationSection)
Equals(Object)

將目前的 ConfigurationElement 執行個體與指定的物件相比較。

(繼承來源 ConfigurationElement)
GetHashCode()

取得表示目前 ConfigurationElement 執行個體的唯一值。

(繼承來源 ConfigurationElement)
GetRuntimeObject()

在衍生類別中覆寫時,傳回自訂物件。

(繼承來源 ConfigurationSection)
GetTransformedAssemblyString(String)

傳回指定之組件名稱的轉換版本。

(繼承來源 ConfigurationElement)
GetTransformedTypeString(String)

傳回指定之型別名稱的轉換版本。

(繼承來源 ConfigurationElement)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
Init()

ConfigurationElement 物件設定為它的初始狀態。

(繼承來源 ConfigurationElement)
InitializeDefault()

用來初始化 ConfigurationElement 物件的預設值集。

(繼承來源 ConfigurationElement)
IsModified()

在衍生類別中進行實作時,指出這個組態項目自上次儲存或載入後是否已修改。

(繼承來源 ConfigurationSection)
IsReadOnly()

取得值,這個值表示 ConfigurationElement 物件是否唯讀。

(繼承來源 ConfigurationElement)
ListErrors(IList)

將這個 ConfigurationElement 物件中和所有子項目中的無效屬性錯誤加入傳遞的清單。

(繼承來源 ConfigurationElement)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
OnDeserializeUnrecognizedAttribute(String, String)

取得值,指出在還原序列化程序中是否遇到未知的屬性 (Attribute)。

(繼承來源 ConfigurationElement)
OnDeserializeUnrecognizedElement(String, XmlReader)

取得值,指出在還原序列化程序中是否遇到未知的項目。

(繼承來源 ConfigurationElement)
OnRequiredPropertyNotFound(String)

在找不到必要的屬性時擲回例外狀況 (Exception)。

(繼承來源 ConfigurationElement)
PostDeserialize()

還原序列化之後呼叫。

(繼承來源 ConfigurationElement)
PreSerialize(XmlWriter)

序列化之前呼叫。

(繼承來源 ConfigurationElement)
Reset(ConfigurationElement)

重設 ConfigurationElement 物件的內部狀態,包括鎖定和屬性的集合。

(繼承來源 ConfigurationElement)
ResetModified()

在衍生類別中實作時,將 IsModified() 方法的值重設為 false

(繼承來源 ConfigurationSection)
SerializeElement(XmlWriter, Boolean)

在衍生類別中實作時,將此組態項目的內容寫入組態檔中。

(繼承來源 ConfigurationElement)
SerializeSection(ConfigurationElement, String, ConfigurationSaveMode)

建立 XML 字串,在該字串的單一區段中,包含了要寫入檔案之 ConfigurationSection 物件的取消合併檢視。

(繼承來源 ConfigurationSection)
SerializeToXmlElement(XmlWriter, String)

在衍生類別中實作時,將此組態項目的外部標記寫入組態檔中。

(繼承來源 ConfigurationElement)
SetPropertyValue(ConfigurationProperty, Object, Boolean)

將屬性設定為指定的值。

(繼承來源 ConfigurationElement)
SetReadOnly()

設定 IsReadOnly() 物件和所有子項目的 ConfigurationElement 屬性。

(繼承來源 ConfigurationElement)
ShouldSerializeElementInTargetVersion(ConfigurationElement, String, FrameworkName)

指出當組態物件階層針對指定的目標版本串行化 .NET Framework 時,是否應該串行化指定的專案。

(繼承來源 ConfigurationSection)
ShouldSerializePropertyInTargetVersion(ConfigurationProperty, String, FrameworkName, ConfigurationElement)

指出當組態物件階層針對指定的目標版本的 .NET Framework 串行化時,是否應該串行化指定的屬性。

(繼承來源 ConfigurationSection)
ShouldSerializeSectionInTargetVersion(FrameworkName)

指出當組態物件階層針對指定的目標版本的 .NET Framework 串行化時,是否應該串行化目前的ConfigurationSection實例。

(繼承來源 ConfigurationSection)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
Unmerge(ConfigurationElement, ConfigurationElement, ConfigurationSaveMode)

修改 ConfigurationElement 物件,以移除不應該儲存的所有值。

(繼承來源 ConfigurationElement)

適用於

另請參閱