文件在C#中的读/写操作上被锁定

时间:2012-09-13 09:09:10

标签: windows c#-4.0

第三方应用程序正在读取我的Windows应用程序的输出文本文件,它正在暂停。我认为,它正在发生,因为文件在写入或读取时被锁定。我可以使这项工作正常。请参阅我的代码。

    List<string> fileList = new List<string>();

    System.Timers.Timer timer;

    string currentfilename;
    string currentcontent;

    public Service1()
    {

//

        timer = new System.Timers.Timer();

        timer.AutoReset = false;



        timer.Elapsed += new System.Timers.ElapsedEventHandler(DoStuff);

    }

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        throw new NotImplementedException();
    }

    private void DoStuff(object sender, System.Timers.ElapsedEventArgs e)
    {


     DateTime LastChecked = DateTime.Now;
     try
     {
         string[] files = System.IO.Directory.GetFiles(@"C:\Journal", "*.jrn", System.IO.SearchOption.AllDirectories);

         foreach (string file in files)
         {
             if (!fileList.Contains(file))
             {
                 currentfilename = file;
                 fileList.Add(file);

                     copywarehouse(file);


                 try
                 {


                         string sourcePath = @"C:\Journal";
                         string sourceFile = System.IO.Path.Combine(sourcePath, file);
                         using (FileStream fs= new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                         {
                             StreamReader sr = new StreamReader(fs);
                             currentcontent = sr.ReadToEnd();
                             sr.Close();

                         }


                 }
                 catch (Exception ex)
                 {

                     throw (ex);

                 }


         }


         }

         try
             {


                     string sourcePath1 = @"C:\Journal";
             string currentfilecontent;
                     string sourceFile1 = System.IO.Path.Combine(sourcePath1, currentfilename);

                     using (FileStream fs = new FileStream(sourceFile1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                     {
                         StreamReader sr = new StreamReader(fs);
                         currentfilecontent = sr.ReadToEnd();
                         sr.Close();

                     }





                     if (currentfilecontent != currentcontent)
                     {
                         if (currentfilecontent.Contains(currentcontent))
                         {
                             string originalcontent = currentfilecontent.Substring(currentcontent.Length);


                                 File.WriteAllText(@"C:\Journal\tempfile.txt", originalcontent + "\r\n");
                              using (FileStream fs = new FileStream(@"C:\Journal\tempfile.txt", FileMode.OpenOrCreate))
            {
                StreamWriter sw = new StreamWriter(fs);
                sw.Write(originalcontent);
                sw.Close();
            }

                             currentcontent = currentfilecontent;
                         }
                     }



                 }
             //}

                 catch (Exception ex)
                 {

                     throw (ex);
                 }

         TimeSpan ts = DateTime.Now.Subtract(LastChecked);
         TimeSpan MaxWaitTime = TimeSpan.FromMilliseconds(100);


         if (MaxWaitTime.Subtract(ts).CompareTo(TimeSpan.Zero) > -1)
             timer.Interval = MaxWaitTime.Subtract(ts).Milliseconds;
         else
             timer.Interval = 1;

         timer.Start();



     }



     catch (Exception ex)
     {
         throw (ex);
     }










    }
    private void copywarehouse(string filename)
    {
        string sourcePath = @"C:\Journal";
        string targetPath = @"C:\Journal";

        string copycontent=null;
        try
        {
            string sourceFile = System.IO.Path.Combine(sourcePath, filename);
            string destFile = System.IO.Path.Combine(targetPath, "tempfile.txt");


            using (FileStream fs = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
               StreamReader sr = new StreamReader(fs);

                copycontent = sr.ReadToEnd();
                sr.Close();


            }

            using (FileStream fs = new FileStream(destFile, FileMode.Append))
            {
                StreamWriter sw = new StreamWriter(fs);
                sw.Write(copycontent);
                sw.Close();
            }



        }
        catch (Exception ex)
        {
            throw (ex);
        }




    }

1 个答案:

答案 0 :(得分:0)

问题在于第三方应用程序正在读取我的应用程序输出作为input.it不允许访问多个文件内容..