北极冰点水 .NET 天空------天空是一个人永远也走不完的大路, 呼吸, 歌唱, 向着阳光

给予我们的誓言 以凝固不化的可能

导航

如何用C#代码设置文件的附加属性啊 例如author, subject 这些啊

RT
MS太麻烦了,干嘛不直接公布一个方法出来呢
我只找到了读的方法.还要用com控件, Shell32,我把那个类贴在下面,供参考

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.IO;

namespace TestforFile
{
    using Shell32; // Use this namespace after add the reference

    /// <summary>

    /// Returns the detailed Information of a given file.

    /// </summary>

    public class CFileInfo
    {
        private string sFileName = "",
            sFullFileName = "",
            sFileExtension = "",
            sFilePath = "",
            sFileComment = "",
            sFileAuthor = "",
            sFileTitle = "",
            sFileSubject = "",
            sFileCategory = "",
            sFileType = "";

        private long lFileLength = 0,
            lFileVersion = 0;

        private DateTime dCreationDate,
            dModificationDate;

        public CFileInfo(string sFPath)
        {
            // check if the given File exists
            if (File.Exists(sFPath))
            {
                ArrayList aDetailedInfo = new ArrayList();
                FileInfo oFInfo = new FileInfo(sFPath);

                sFileName = oFInfo.Name;
                sFullFileName = oFInfo.FullName;
                sFileExtension = oFInfo.Extension;
                lFileLength = oFInfo.Length;
                sFilePath = oFInfo.Directory.ToString();
                dCreationDate = oFInfo.CreationTime;
                dModificationDate = oFInfo.LastWriteTime;

                #region "read File Details"
                aDetailedInfo = GetDetailedFileInfo(sFPath);
                foreach (DetailedFileInfo oDFI in aDetailedInfo)
                {
                    switch (oDFI.ID)
                    {
                        case 2:
                            sFileType = oDFI.Value;
                            break;

                        case 9:
                            sFileAuthor = oDFI.Value;
                            break;

                        case 10:
                            sFileTitle = oDFI.Value;
                            break;

                        case 11:
                            sFileSubject = oDFI.Value;
                            break;

                        case 12:
                            sFileCategory = oDFI.Value;
                            break;

                        case 14:
                            sFileComment = oDFI.Value;
                            break;

                        default:
                            break;
                    }
                }
                #endregion
            }
            else
            {
                throw new Exception("The given File does not exist");
            }
        }

        #region "Properties"
        public string FileName
        {
            get { return sFileName; }
            set { sFileName = value; }
        }

        public string FilePath
        {
            get { return sFilePath; }
            set { sFilePath = value; }
        }

        public string FullFileName
        {
            get { return sFullFileName; }
            set { sFullFileName = value; }
        }

        public string FileExtension
        {
            get { return sFileExtension; }
            set { sFileExtension = value; }
        }

        public long FileSize
        {
            get { return lFileLength; }
            set { lFileLength = value; }
        }

        public long FileVersion
        {
            get { return lFileVersion; }
            set { lFileVersion = value; }
        }

        public DateTime FileCreationDate
        {
            get { return dCreationDate; }
            set { dCreationDate = value; }
        }

        public DateTime FileModificationDate
        {
            get { return dModificationDate; }
            set { dModificationDate = value; }
        }

        public string FileType
        {
            get { return sFileType; }
        }

        public string FileTitle
        {
            get { return sFileTitle; }
        }

        public string FileSubject
        {
            get { return sFileSubject; }
        }

        public string FileAuthor
        {
            get { return sFileAuthor; }
        }

        public string FileCategory
        {
            get { return sFileCategory; }
        }

        public string FileComment
        {
            get { return sFileComment; }
        }
        #endregion

        #region "Methods"

        private ArrayList GetDetailedFileInfo(string sFile)
        {
            ArrayList aReturn = new ArrayList();
            if (sFile.Length > 0)
            {
                try
                {
                    // Creating a ShellClass Object from the Shell32

                    ShellClass sh = new ShellClass();
                    // Creating a Folder Object from Folder that inculdes the File
                    Folder dir = sh.NameSpace(Path.GetDirectoryName(sFile));
                    // Creating a new FolderItem from Folder that includes the File
                    FolderItem item = dir.ParseName(Path.GetFileName(sFile));
                    // loop throw the Folder Items

                    for (int i = 0; i < 30; i++)
                    {
                        // read the current detail Info from the FolderItem Object

                        //(Retrieves details about an item in a folder. For example, its size, type, or the time of its last modification.)

                        // some examples:
                        // 0 Retrieves the name of the item.
                        // 1 Retrieves the size of the item.
                        // 2 Retrieves the type of the item.
                        // 3 Retrieves the date and time that the item was last modified.
                        // 4 Retrieves the attributes of the item.
                        // -1 Retrieves the info tip information for the item.

                        string det = dir.GetDetailsOf(item, i);

                        // Create a helper Object for holding the current Information
                        // an put it into a ArrayList

                        DetailedFileInfo oFileInfo = new DetailedFileInfo(i, det);
                        aReturn.Add(oFileInfo);
                    }
                }
                catch (Exception)
                {
                }
            }
            return aReturn;
        }
        #endregion
    }

    // Helper Class from holding the detailed File Informations
    // of the System
    public class DetailedFileInfo
    {

        int iID = 0;
        string sValue = "";

        public int ID
        {
            get { return iID; }
            set
            {
                iID = value;
            }
        }

        public string Value
        {
            get { return sValue; }
            set { sValue = value; }
        }

        public DetailedFileInfo(int ID, string Value)
        {
            iID = ID;
            sValue = Value;
        }
    }
}

posted on 2008-03-05 17:35  北极冰点水  阅读(1959)  评论(1)    收藏  举报