正在使用的文件即使使用close(), append也不能工作

本文关键字:append 也不能 工作 文件 close | 更新日期: 2023-09-27 17:53:29

我一直试图写这个为了列出我的文件夹,追加部分不起作用,它重写了整个东西,如果我试图列出其他东西而不退出应用程序,它会给出"文件正在使用"错误这对我来说没有意义,因为我在每个循环结束时使用close()。

我检查了几乎所有的微软文档和大量的帖子,但还是没有找到我的答案。

显示错误的图片

提前感谢!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace Anime_Lister
{
    public partial class Anime0Lister : Form
    {

        public void Appen()
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text, true))
            {

                DirectoryInfo directory = new DirectoryInfo(path0tb.Text);
                DirectoryInfo[] directory0Arr = directory.GetDirectories();
                foreach (DirectoryInfo dir in directory0Arr)
                {
                    String Parent = Convert.ToString(dir.Parent);
                    String Name = Convert.ToString(dir.Name);
                    String Root = Convert.ToString(dir.Root);

                    File.AppendAllText(path0save.Text, Parent);
                    File.AppendAllText(path0save.Text, "   || ");
                    File.AppendAllText(path0save.Text, Name + System.Environment.NewLine);
                    File.AppendAllText(path0save.Text, Root + System.Environment.NewLine);

                }
            }
        }
        public void Writer()
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text))
            {
                DirectoryInfo directory = new DirectoryInfo(path0tb.Text);
                DirectoryInfo[] directory0Arr = directory.GetDirectories();
                foreach (DirectoryInfo dir in directory0Arr)
                {
                    String Parent = Convert.ToString(dir.Parent);
                    String Name = Convert.ToString(dir.Name);
                    String Root = Convert.ToString(dir.Root);
                    file.Write(Parent);
                    file.Write("   || ");
                    file.WriteLine(Name);
                    file.WriteLine(Root);


                }
            }

        }

        public void Browser()
        {
            FolderBrowserDialog address = new FolderBrowserDialog();
            if (address.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                path0tb.Text = address.SelectedPath;

        }
        public void Browser2()
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                path0save.Text = saveFileDialog1.FileName;
            }

        }
        public Anime0Lister()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //_____________________________________________________________List



            {
                try
                {

                    if (existing0file.Checked == true)
                    {
                        Appen();
                    }
                    else
                    {
                        Writer();
                    }    
                }

                catch (Exception Fail)
                {
                    MessageBox.Show(Fail.Message);

                }

            }
        }

    }
}

正在使用的文件即使使用close(), append也不能工作

StreamWriter这样的一次性对象应该总是包含在Using语句中,以确保即使在发生异常的情况下,该对象也被关闭,其未管理的资源被释放以供重用。该语言为您提供了一个特定的语句,(使用语句),但是,在您的具体情况下,如果您使用StreamWriter打开文件,那么您不能使用File.AppendAllText,因为此方法试图自己打开文件并发现它"在使用中"由先前打开的StreamWriter

    public void Appen()
    {
        using(System.IO.StreamWriter file = new System.IO.StreamWriter(path0save.Text, true))
        {
             DirectoryInfo directory = new DirectoryInfo(path0tb.Text);
             DirectoryInfo[] directory0Arr = directory.GetDirectories();
             foreach (DirectoryInfo dir in directory0Arr)
             {
                 // No need for those Convert.ToString. 
                 // The DirectoryInfo properties used are already strings.
                 file.Write(dir.Parent);
                 file.Write("   || ");
                 file.WriteLine(dir.Name);
                 file.WriteLine(dir.Root);
                 // or just in one line
                 //file.WriteLine(string.Concat(dir.Parent, 
                 //                      "   || ", 
                 //                      dir.Name, 
                 //                      Environment.NewLine,  
                 //                      dir.Root));  
            }
        }
    }
相关文章: