讲一串的 十六进制 数 通过          StrAppText = Encoding.Default.GetString(dates);
        this.WriteSbd(StrFilePath, StrAppText);        private void WriteSbd(string FilePath, string WriteText)
        {            if (!File.Exists(FilePath))
            {
            StreamWriter sw = File.CreateText(FilePath);
            sw.Write(WriteText);
            sw.Close();
            sw.Dispose();
            }
        }   
写进一个 .SBD 文件中第一次写的时候没有错误, 第二次写的时候就出现标题那样的错误。  我想要删除这个文件也会出现这样的错误。  这个文件是作为邮件附件  发送完邮件了 就要删除掉  没有其它进程在使用,对文件的操作也就只有上面一个方法  WriteSbd() ,  它也是使用完了就关闭的。      可能是什么原因 会导致出现这样的错误呢?

解决方案 »

  1.   


                sw.Dispose();
    sw.Close();换个位置试试
      

  2.   

    释放文件的操作如filestream.close
    多线程操作
      

  3.   

    sw.Dispose();
    不需要
    还有,如果是多线程 访问文件的话,可能会出现这个问题,需要进行加锁处理
      

  4.   


    加锁处理?  能具体说说吗?  我开始怀疑是不是File 这个静态类的原因造成的
      

  5.   

    http://topic.csdn.net/u/20100818/17/96191c6b-e1f4-4161-abd4-29c424f22100.html
    这不是你的帖子么?这问题不是一样的么?
      

  6.   


    //加个同步属性,来锁
    [MethodImpl(MethodImplOptions.Synchronized)]
    private void WriteSbd(string FilePath, string WriteText)
            {            if (!File.Exists(FilePath))
                {
                StreamWriter sw = File.CreateText(FilePath);
                sw.Write(WriteText);
                sw.Close();
                sw.Dispose();
                }
            }
      

  7.   

    和静态类没关系,,你的程序是多线程 确实需要加锁的
    或者你加一个 try catch 包一下  在catch里加一个 Thread.Sleep(1000);在加调用本方法
    就是让他循环调用本身 1秒调用一次,,直到完成这个过程,,当然这样可能造成死锁最好的办法就是你可以通过一个变量 来控制此方法是否被占用,被占用就等待
      

  8.   


    作附件发送 如果是邮件发送等待的话 程序是会停在那里的。 等邮件发送成功了 才能执行下一步。  应该没有可能说  程序发送邮件成功了以后  client.Send(mail);   还在使用这个附件吧?
      

  9.   


       /// <summary>
            /// 保存附件
            /// </summary>
            /// <param name="dates"></param>
            /// <param name="path"></param>
            private void SaveFile(byte[] dates, string StrSavePath)
            {
                try
                {
                    string StrAppText = Encoding.Default.GetString(dates);
                    ////this.WriteSbd(StrFilePath, StrAppText);            
                    //if (File.Exists(StrSavePath)) File.Delete(StrSavePath);
                    //File.AppendAllText(StrSavePath, StrAppText);                File.WriteAllText(StrSavePath, StrAppText);
                }
                catch (Exception e)
                {
                    log.WriteLog("File被占用", e.Message);
                    Thread.Sleep(10000);
                    this.SaveFile(dates, StrSavePath);
                }
            }
    我用这个方法测试了 下  在调用这个放的后一个方法出打了断点跟踪。 半个小时过去了  还在这里死循环
      

  10.   

    你用工具unlock 工具看看,是什么进程在锁定文件。
      

  11.   

    13楼是正确的   MailMessage mail = new MailMessage();   。。
     mail.Dispose();就没有问题了原来 MailMessage  也需要释放资源。 谢谢大家