Почему я получаю файл, используемый другой ошибкой процесса? - PullRequest
1 голос
/ 21 апреля 2019

Когда я вызываю функцию 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();
        }
    }

1 Ответ

2 голосов
/ 21 апреля 2019

File.Create возвращает поток в созданный файл.Поскольку вы не удаляете поток, у вас возникает ошибка при попытке открыть этот же файл заново.

Я также подозреваю, что вы испортили логику "RemoveLast".Я предполагаю, что вы хотите добавить содержимое в существующий файл, когда для него установлено значение false:

if (InExistingTxt && !File.Exists(path))
    return;

StreamWriter SW;

if (RemoveLast)
    SW = File.CreateText(path);
else 
    SW = File.AppendText(path);

using (SW)
{
    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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...