欢迎来到电脑知识学习网,专业的电脑知识大全学习平台!

手机版

添加/删除博客信息——Word 2007高级应用8

软件应用 发布时间:2018-12-02 11:03:40

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

  

添加/删除博客信息——Word 2007高级应用8

  图  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,以下几点是需要说明的:


责任编辑:电脑知识学习网

软件应用