获取{"进程无法访问文件'文件'因为#WPF App

时间:2016-05-15 12:29:59

标签: c# wpf visual-studio-2015

到目前为止,我一整天都在努力工作,似乎无法找到原因......

我正在构建一个基本应用程序(我的第一个从头开始),我可以在其中添加名称(存储在.txt文件中),然后从列表中随机选择一个名称作为竞赛获胜者。在加载应用程序时,存储在txt文件中的名称将显示在文本块中,并且每次将名称添加到列表时都会更新此名称而不会出现问题。当我从列表中随机选择获胜者时会出现问题。我第一次选择一个它工作正常。它会弹出一个消息框,通知我获胜者,将其从列表中删除然后更新显示。如果我然后点击"选择赢家"再次,它抛出一个System.IO异常,说该文件正被另一个进程使用。这是我现在在代码中的内容。

private void SelectWinner_Click_1(object sender, RoutedEventArgs e)
    {
        string path = @"C:\CompWinner\Text\Entrants.txt";
        string path2 = @"C:\CompWinner\Text\Entrants2.txt";
        string[] allLines = File.ReadAllLines(path);

        if (string.IsNullOrEmpty(allLines.ToString()))
        {
            string caption = "Error!";
            string messageBoxText = "There are currently no Entrants.\r\nPlease add some entrants to select a winner";
            MessageBoxButton messageBoxButton = MessageBoxButton.OK;
            MessageBox.Show(messageBoxText, caption, messageBoxButton);
        }
        else
        {
            var list = new List<string>();
            foreach (string line in allLines)
            {
                list.Add(line);
            }

            var r = new Random();
            int I = list.Count;
            int num = r.Next(I);

            var winner = list[num];

            string caption = "Winner!";
            string messageBoxText = "And the winner is:\r\n" + winner + "!\r\nCongratulations!";
            MessageBoxButton messageBoxButton = MessageBoxButton.OK;
            MessageBox.Show(messageBoxText, caption, messageBoxButton);

            list.Remove(winner);

            foreach (string item in list)
            {
                int attempts = 15;
                Exception cannotReadException = null;
                while (attempts > 0)
                {
                    try
                    {
                        using (StreamWriter sw = File.AppendText(path2))
                        {
                            string personName = item;
                            sw.WriteLine(personName);
                        }
                    }
                    catch (Exception exception)
                    {
                        cannotReadException = exception;
                        System.Threading.Thread.Sleep(3000);
                        attempts--;
                    }
                    break;
                }
                if (cannotReadException != null)
                {
                    throw cannotReadException;
                }
            }
            ReplaceLists(sender, e);
        }    
    }

即使有try / catch,它仍然会在第一次无法读取时抛出异常!= null

真的希望有人可以帮我解决这个问题,因为这是我对这个应用程序的最后一个问题。

0 个答案:

没有答案