为什么我得到另一个进程错误使用的文件?

当我调用该Generate函数时,它不会创建StreamWriter对象,而是抛出一个异常:


另一个进程使用的文件


但文件未打开,这是第一个使用它的流。


    public static string GetWindowsUserName()

    {

        string st = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

        bool Condition = false;

        foreach (char ch in st)

        {

            if (ch == '\\')

                Condition = true;

        }

        if (Condition)

        {

            string[] stArr = st.Split('\\');

            st = stArr[stArr.Length - 1];

        }

        return st;

    }

    public static void Generate(bool Desktop, bool RemoveLast, bool InExistingTxt, int Count, int Length)

    {

        Random Generator = new Random();

        if (Desktop)

            path = $"C:\\Users\\{GetWindowsUserName()}\\Desktop\\GeneratedNumbers.txt";

        else

            path = "GeneratedNumbers.txt";

        if (!InExistingTxt && !RemoveLast)

            File.Create(path);

        else if (!InExistingTxt && RemoveLast)

        {

            if (File.Exists(path))

            {

                File.Delete(path);

            }

            File.Create(path);

        }

        System.Threading.Thread.Sleep(1000);

        if (File.Exists(path))

        {

            StreamWriter SW = new StreamWriter(path);

            for (int i = 0; i < Count; i++)

            {

                string st = "";

                for (int j = 0; j < Length; j++)

                {

                    int o = Generator.Next(0, 11);

                    st += Convert.ToString(o);

                }

                SW.WriteLine(st);

            }

            SW.Dispose();

        }

    }


牛魔王的故事
浏览 88回答 1
1回答

临摹微笑

File.Create将流返回到创建的文件。由于您没有处理流,因此在尝试重新打开同一文件时会出错。我还怀疑您搞砸了“RemoveLast”逻辑。我假设您想要在现有文件设置为 false 时将内容附加到现有文件:if (InExistingTxt && !File.Exists(path))&nbsp; &nbsp; return;StreamWriter SW;if (RemoveLast)&nbsp; &nbsp; SW = File.CreateText(path);else&nbsp;&nbsp; &nbsp; SW = File.AppendText(path);using (SW){&nbsp; &nbsp; for (int i = 0; i < Count; i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; string st = "";&nbsp; &nbsp; &nbsp; &nbsp; for (int j = 0; j < Length; j++)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int o = Generator.Next(0, 11);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; st += Convert.ToString(o);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; SW.WriteLine(st);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP