http://www.pptjcw.com

word制作表格教程基础入门:添加/删除博客信息--Word 2007高级应用8

    Manage Blogs按钮的其中一组重要功能是显示、储存和更改工作目录的当前位置,而这个位置是储存在配置中的,于是,我们得先构建好这个储存设施。打开项目的属 性窗口,切换到Settings页面,在里面添加WorkingDirectory项,并将其Type设置为string,Scope设置为User:

    图 1

    当用户第一次运行插件时,工作目录和WorkingDirectory项的值都没有就绪,需要在所有自定义插件代码运行之前创建工作目录,并把WorkingDirectory项的值初始化为该目录的路径。初次运行时:

    在我的文档目录下创建一个My Blogs文件夹;

    在My Blogs文件夹里面创建Blogs.xml数据文件;

    把WorkingDirectory项的值设置为第一步创建的文件夹的路径。

    而当用户更改工作目录的位置时:

    里面的东西会一并移动到新的位置;

    WorkingDirectory项的值会被设为新工作目录的路径。

    Manage Blogs按钮的另一组重要功能是显示现有博客、添加新博客、更改现有博客的名字和删除现有博客。现有博客的显示是通过获取Blogs.xml里的数据来实现的。新博客的添加会依次执行如下两项操作:

    把新博客的名字和网页地址添加到Blogs.xml里;

    在工作目录里为新博客创建一个以其名字为名的文件夹,并在该文件夹里分别创建Posts和Drafts两个文件夹。

    对于一个给定的博客,它的网页地址就是它的身份标识,一旦更改,我们就认为是一个新的博客,所以更改博客的信息仅限于更改它的名字,而这又涉及到如下两项操作:

    把Blogs.xml里对应的博客名字改为新的名字;

    把工作目录里对应的文件夹名字改为新的名字。

    现有博客的删除也包含如下两项操作:

    在Blogs.xml里删除该博客的对应信息;

    在工作目录里删除该博客相关的文件夹及其内容。

    这些操作将会由BlogsManager类负责:

    // Code #04
    public class BlogsManager
    {
    private BlogsManager()
    {
    }
    private static BlogsManager m_Instance = new BlogsManager();
    public static BlogsManager Instance
    {
    get { return m_Instance; }
    }
    public void Initialize()
    {
    if (String.IsNullOrEmpty(WorkingDirectory))
    {
    Properties.Settings.Default.WorkingDirectory = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
    "My Blogs"
    );
    }
    if (!Directory.Exists(WorkingDirectory))
    {
    Directory.CreateDirectory(WorkingDirectory);
    }
    string metadataPath = Path.Combine(WorkingDirectory, "Blogs.xml");
    if (!File.Exists(metadataPath))
    {
    XElement blogsMetadata = new XElement(
    "blogs", new XAttribute("defaultBlog", String.Empty)
    );
    blogsMetadata.Save(metadataPath);
    }
    }
    public string WorkingDirectory
    {
    get
    {
    return Properties.Settings.Default.WorkingDirectory;
    }
    set
    {
    if (Properties.Settings.Default.WorkingDirectory != value)
    {
    MoveWorkingDirectoryTo(value);
    Properties.Settings.Default.WorkingDirectory = value;
    }
    }
    }
    public Blog[] Blogs
    {
    get
    {
    XElement blogsMetadata = XElement.Load(
    Path.Combine(WorkingDirectory, "Blogs.xml")
    );
    var blogs = from blog in blogsMetadata.Elements()
    select new Blog
    {
    Name = blog.Attribute("name").Value,
    Url = blog.Attribute("url").Value
    };
    return blogs.ToArray();
    }
    }
    public void Add(Blog blog)
    {
    // Add blog info to Blogs.xml
    string metadataPath = Path.Combine(WorkingDirectory, "Blogs.xml");
    XElement blogsMetadata = XElement.Load(metadataPath);
    blogsMetadata.Add(
    new XElement("blog", new XAttribute("name", blog.Name), new XAttribute("url", blog.Url))
    );
    blogsMetadata.Save(metadataPath);
    // Create directory structure for blog
    string blogPath = Path.Combine(WorkingDirectory, blog.Name);
    string postsPath = Path.Combine(blogPath, "Posts");
    string draftsPath = Path.Combine(blogPath, "Drafts");
    Directory.CreateDirectory(blogPath);
    Directory.CreateDirectory(postsPath);
    Directory.CreateDirectory(draftsPath);
    }
    public void Rename(string oldBlogName, string newBlogName)
    {
    // Modify blog info in Blogs.xml
    string metadataPath = Path.Combine(WorkingDirectory, "Blogs.xml");
    XElement blogsMetadata = XElement.Load(metadataPath);
    XElement blogMetadata = blogsMetadata.Elements().Single(
    blog => blog.Attribute("name").Value == oldBlogName
    );
    blogMetadata.Attribute("name").Value = newBlogName;
    blogsMetadata.Save(metadataPath);
    // Rename blog directory
    string oldBlogPath = Path.Combine(WorkingDirectory, oldBlogName);
    string newBlogPath = Path.Combine(WorkingDirectory, newBlogName);
    Directory.Move(oldBlogName, newBlogName);
    }
    public void Remove(string blogName)
    {
    // Remove blog info from Blogs.xml
    string metadataPath = Path.Combine(WorkingDirectory, "Blogs.xml");
    XElement blogsMetadata = XElement.Load(metadataPath);
    XElement blogMetadata = blogsMetadata.Elements().Single(
    blog => blog.Attribute("name").Value == blogName
    );
    blogMetadata.Remove();
    blogsMetadata.Save(metadataPath);
    // Remove blog directory
    string blogPath = Path.Combine(WorkingDirectory, blogName);
    Directory.Delete(blogPath, true);
    }
    private void MoveWorkingDirectoryTo(string newPath)
    {
    string oldPath = WorkingDirectory;
    foreach (var directory in Directory.GetDirectories(oldPath))
    {
    Directory.Move(
    directory,
    Path.Combine(newPath, Path.GetFileName(directory))
    );
    }
    File.Move(
    Path.Combine(oldPath, "Blogs.xml"),
    Path.Combine(newPath, "Blogs.xml")
    );
    }
    }
     

    对于Code #04,以下几点是需要说明的:

    提示:如果您觉得本文不错,请点击分享给您的好友!谢谢

    上一篇:word教程零基础教程免费:用Word 2007制作规范表格 下一篇:word表格教程:制作封面.扉页和目录--Word 2007书籍排版完全手册9

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读