A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 愤怒的小小鸟 于 2013-11-6 21:32 编辑

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

namespace 文件缓存管理器
{
    class Program
    {
        static void Main(string[] args)
        {
           string s=FileCacheManager.Instance.IsExist(@"c:\1.txt");
            Console.WriteLine(s);
            Console.Read();
        }
    }
    public sealed class FileCacheManager
    {
        public static readonly FileCacheManager Instance = new FileCacheManager();
        //将dic作为缓存:存储实际文件路径,文件内容
        private Dictionary<string, CacheItem> dic = new Dictionary<string, CacheItem>();
        public string IsExist(string filepath)
        {
            if (dic.ContainsKey(filepath))
            {
                //返回内容
                return dic[filepath].Content;
            }
            else
            {
            //将文件内容存入缓存
                string s = File.ReadAllText(filepath);
                CacheItem item = new CacheItem();
                //item.Content = s;
                //dic[filepath]=item;
               dic[filepath].Content = s;//这段报错,说给定关键字不在字典中,但是改为上面两行代码就行,为什么?
                return s;
            }
        }
    }
    class CacheItem
    {
        public string Content { get; set; }
        public DateTime LastWriteTime { get; set; }
    }
}


评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

2 个回复

正序浏览
      在 IsExist(string filePath)方法中 在if中你判断有无key 在else中你又当key为filepath存在,这相互矛盾。        只要在 else中的dic[filepath].Content=s;这行代码上面加上 dic.Add(filepath,new CacheItem()); 这行代码就行了。

点评

好的,谢谢了  发表于 2013-11-6 21:23

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马