日期:2014-05-18  浏览次数:20851 次

关于ResourceWriter文件占用问题
C# code


        private bool writeInResources()
        {
            IResourceWriter writer = null;
            try
            {
                writer = new ResourceWriter(@"myResources.resources");
                writer.AddResource("day1", Constant.arrayMon);
                writer.AddResource("day6", Constant.arraySat);
                writer.AddResource("day7", Constant.arraySun);
                writer.AddResource("day5", Constant.arrayFri);
                writer.AddResource("day4", Constant.arrayThurs);
                writer.AddResource("day3", Constant.arrayWed);
                writer.AddResource("day2", Constant.arrayTues);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return false;
            }
            finally
            {
                if(writer !=null)
                    writer.Close();
            }
            return true;
        }



为什么经常抛出这样的异常:
文件“E:\visualstudio\SBMProj\SBMProj\bin\Debug\myResources.resources”正由另一进程使用,因此该进程无法访问此文件

以下是读的
C# code

        private List<int> readOutResources()
        {
            ResourceManager rm = null;
            List<int> l = null;
            try
            {
                rm  = ResourceManager.CreateFileBasedResourceManager("myResources", "/", null);
                if (rm == null) return null;
                l = rm.GetObject("day" + dayOfWeek.ToString()) as List<int>;
            }
            catch (Exception e)
            {
                return null;
            }

            return l;
        


再也没有其他地方使用了,有时候写正常,有时候写就抛那个异常,为什么啊

------解决方案--------------------
你用 release 测试一下,不知道有没有多线程。推测是 .net debug 影响了。
------解决方案--------------------
加个lock试试
------解决方案--------------------
因为文件被锁定啦,嘿嘿~~喵乌~
------解决方案--------------------
建议不用close,改用try finally {dispose试试}