这段代码就是获取一个页面的Html代码,写到指定的文件夹里,代码如下:
public bool SaveHtml(string url, string path)
        {
          try
            {
                
                EnsurePath(path);  //这个函数就是确保 path 中的文件夹是存在的.                             string html = getHtmlText(url);
                
                //这里写文件
                StreamWriter wr = new StreamWriter(filePath, false, Encoding.GetEncoding("gb2312"));
                wr.Write(html);
                wr.Flush();
                wr.Close();                return true;
            }
            catch (Exception ex)
            {                             //往系统的日志里写出错信息
                LogHelper.WriteErrorMessage("出错:" + ex.Message + "\nStackTrace:" + ex.StackTrace + "\nSource:" + ex.Source + "\nURL:" + url + "\n存储路径:" + path);
                return false;
            }
        }       /// <summary>
        /// 确保路径里的文件夹是存在的,不存在,就创建
        /// </summary>
        /// <param name="Inpath"></param>
        public void EnsurePath(string Inpath)
        {
            string[] pathSplit = Inpath.Split('\\');
            string path = pathSplit[0] + "\\" + pathSplit[1];
            for (int i = 2; i < pathSplit.Length - 1; i++)
            {
                path += "\\" + pathSplit[i];
                if (!Directory.Exists(path))
                    Directory.CreateDirectory(path);
            }
        }
SaveHtml()函数是被循环调用的,大部分时候是好的,但是到了某个文件夹的时候就老是出现  无法创建目录或文件
在出现错误的时候,这个目录下有接近2万5千左右的文件.每个文件大概 16k左右.
不知道是哪里有问题,请大家帮我看看.  非常感谢.

解决方案 »

  1.   

    路径是没有问题的.
    这个是出错后写的日志
    出现错误,当前页面:CommonMemberTradeLead
    出错:无法创建目录或文件。StackTrace:   在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
       在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
       在 System.IO.StreamWriter.CreateFile(String path, Boolean append)
       在 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
       在 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
       在 Component.PageGenerator.SaveHtml(PageInfo currentInfo) 位置 D:\GenerateStaticPage\Component\Object\Page.cs:行号 143
    Source:mscorlib
    URL:http://www.luosi.com/TradeLeads/SubScribe2.asp?MemberID=62085&TradeLeadID=80312
    存储路径:F:\xxxx\TradeLeads\subscribe2\62085_80312.html有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
      

  2.   

    我也刚刚看到,是不是csdn 出错了.
      

  3.   

    1. 可以加条件断点看看具体哪行出了问题?
    2. 推荐使用Using关键字
    using (StreamWriter wr = new StreamWriter(filePath, false, Encoding.GetEncoding("gb2312"));
                    wr.Write(html);
                    wr.Flush();
                    wr.Close();
    )
    3. 从你的结果来看,有可能是堆栈过深导致的,可以优化下算法看看。
      

  4.   

    StreamWriter wr = new StreamWriter(filePath, false, Encoding.GetEncoding("gb2312"));这个filePath哪儿来的,是不是path
      

  5.   

    如果是filePath应该是编译时就把错了,你是哪行报的错,
      

  6.   

    你要返回一个创建文件成功
    再继续循环 
     否则循环过快 就出现
    出现错误,当前页面:CommonMemberTradeLead 
    出错:无法创建目录或文件。 
      

  7.   


    这位朋友很细心,
    代码是没有问题的,你看到的filePath 是我在贴代码的时候,把代码改了下,为的是让大家更清晰的知道这个SaveHtml()的流程.
      

  8.   


    是我说的不全.
    1.路径是没有问题的,这个可以确保.
    2.开发的机器没有装杀毒软件.程序运行的时候,CPU的占用率一直在20%以下.
      

  9.   

    安全问题?
    你是FORM程序还是WEB程序?
      

  10.   

    出错时,文件数量大概在2w5k个左右. 每个文件大概16k
    磁盘空间也足够.
      

  11.   


    调用SaveHtml()函数的是一个Windows服务.
      

  12.   

    EnsurePath(path);
    这个方法不要放到SaveHtml()里面,没必要每次都确认。。
    只要在循环之前调用一次就够了。。
      

  13.   

    你把断点设在
    LogHelper.WriteErrorMessage("出错:" + ex.Message + "\nStackTrace:" + ex.StackTrace + "\nSource:" + ex.Source + "\nURL:" + url + "\n存储路径:" + path);
    这一句,调试运行,
    错了以后运行标志拖到上面,单步执行,看是哪行报的错,再把path值贴出来
      

  14.   

    在VSTS中,选择[Debug]->[Exceptions...]->选择[Common Language Runtime Exceptions]->[Throw].这样在Debug下就会自动断到具体代码行
      

  15.   


    设置不了断点,这个函数是被循环调用的,大概要调用 几万次,设置条件也不行,这个错误不知道什么时候就会Catch到.path 的值 是没有问题的,这个可以确保.  你看看我在前面贴的出错信息. 后面有路径的值.
      

  16.   

    是啊, 开始时运行得好好的. 大概生成了2万多个文件后,就会出问题了.不知道 ntfs 文件系统里一个文件夹下最多可有多少个文件.
      

  17.   

    是啊,FAT32下单个文件不能大于4.?G,
    不知道NTFS里是不是有这种限制
      

  18.   

    可能是我机器的问题. 生成了大概 22389 个文件后,就不能在这个文件夹里创建文件了. 
    甚至在  Explorer  里 右键, 新建 , 文本文档, 都提示 无法创建文件.
     不知道怎么回事.但我在公司的服务器里看了,那个文件夹里至少有16w 个文件. 都没问题.
     不过在 Explorer 里进入那个文件夹是相当的慢.
      

  19.   

    找到问题了. 
    刚才看了下, 磁盘的文件系统是FAT32的, 在这个文件夹下创建了 22389个文件后,就不能创建文件了.删除一个,就可以再创建一个,如果再创建就会出错了.
    看来FAT32 的文件系统很烂.  转成NTFS的再试试.  马上结贴. 谢谢大家都关注.