Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-StreamReader/StreamWriter-另一个进程使用的文件_C#_File Io_Io_Iostream_Read Write - Fatal编程技术网

C#-StreamReader/StreamWriter-另一个进程使用的文件

C#-StreamReader/StreamWriter-另一个进程使用的文件,c#,file-io,io,iostream,read-write,C#,File Io,Io,Iostream,Read Write,首先,我确保妥善处理和关闭所有东西(读写器)。我使用的方法是使用using语句;在此之前,我手动使用了编写器和读取器提供的dispose和close方法。这两种方法都不能解决问题。 其次,也是我怀疑的一点,我正在处理大量的文件,包括读和写。此外,每次我运行程序时,程序都会深入到应该处理的文件列表中(即,我有10个文件,第一次运行程序时,它会在抛出错误之前处理前2个文件;第二次运行程序时,它会在抛出错误之前处理前5个文件,依此类推)。 那么我应该如何解决这个问题/bug呢? 提前谢谢 编辑-附加代

首先,我确保妥善处理和关闭所有东西(读写器)。我使用的方法是使用using语句;在此之前,我手动使用了编写器和读取器提供的dispose和close方法。这两种方法都不能解决问题。 其次,也是我怀疑的一点,我正在处理大量的文件,包括读和写。此外,每次我运行程序时,程序都会深入到应该处理的文件列表中(即,我有10个文件,第一次运行程序时,它会在抛出错误之前处理前2个文件;第二次运行程序时,它会在抛出错误之前处理前5个文件,依此类推)。 那么我应该如何解决这个问题/bug呢? 提前谢谢

编辑-附加代码

    public static void FileProcessing(string initPath, string targetPath, string startLine)
    {
        string line = null;
        string content = null;
        string nl = "\r\n";
        using (StreamReader reader = new StreamReader(initPath))
        {
            while (!reader.ReadLine().Contains(startLine)) ;

            while (!reader.EndOfStream)
            {
                line = reader.ReadLine();
                // Ignore empty line.
                if (line.Length > 0)
                {
                    if (!line.Contains("<div"))
                        content += line += nl;
                    else
                        break;
                }
            }
        }

        using (StreamWriter writer = new StreamWriter(targetPath))
        {
            writer.Write(content.Trim());
        }
    }

    /// <summary>
    /// Create a temporary text file that correspond to the calendar department page
    /// and return the path.
    /// </summary>
    public static string CreateFile(string path, string title)
    {
        string npath = path + title + ".txt";
        if (!File.Exists(npath))
            File.CreateText(npath);
        return npath;
    }

    /// <summary>
    /// Return the title of the page.
    /// </summary>
    /// <param name="path"></param>
    public static string GetTitle(string path)
    {
        string line;
        using (StreamReader reader = new StreamReader(path))
        {
            for (int i = 0; i < 31; ++i)
            {
                line = reader.ReadLine();
                // Ignore empty line.
                if (line.Length > 0)
                {
                    if (line.Contains("<h1>"))
                    {
                        return line.Slice(4, -5);
                    }
                }
            }
            return "null";
        }
    }


    /// <summary>
    /// Get content from temp path and
    /// output the processed text to destination path.
    /// </summary>
    /// <param name="tempPath"></param>
    /// <param name="title"></param>
    public static void WriteProcessedText(string tempPath, string targetPath)
    {
        string content = null;
        using (StreamReader reader = new StreamReader(tempPath))
        {
            string nl = "\r\n";
            string line = null;
            while (!reader.EndOfStream)
            {
                line = HtmlRemoval.StripTagsRegex(reader.ReadLine()) + nl;
                if (line.Contains("&nbsp;"))
                    line = line.Replace("&nbsp;", " ");
                content += line;
            }
        }

        using (StreamWriter writer = new StreamWriter(targetPath))
        {
            writer.Write(content.Trim());
        }
    }
publicstaticvoidfileprocessing(stringinitpath、stringtargetpath、stringstartine)
{
字符串行=null;
字符串内容=null;
字符串nl=“\r\n”;
使用(StreamReader=newstreamreader(initPath))
{
而(!reader.ReadLine().Contains(startine));
而(!reader.EndOfStream)
{
line=reader.ReadLine();
//忽略空行。
如果(直线长度>0)
{
如果(!line.Contains(“
File.CreateText(npath)
不仅会在磁盘上创建文件名,还会打开它。因此,请在
CreateFile
方法中关闭它,或者将其更改为返回流

public static string CreateFile(string path, string title)
{
    string npath = path + title + ".txt";
    if (!File.Exists(npath))
        File.CreateText(npath); //<-- File is not closed !!!
    return npath;
}
publicstaticstringcreatefile(字符串路径、字符串标题)
{
字符串npath=path+title+“.txt”;
如果(!File.Exists(npath))

File.CreateText(npath);//故事很好。屏幕在哪里?没有你的代码!我不这么认为,请用你的代码更新问题代码附在后面。content+=line+=nl;?那不应该是content+=line+nl;