Процесс не может получить доступ к файлу C# - PullRequest
0 голосов
/ 24 марта 2020

В моем WPF C# Приложение Я пытаюсь сохранить два файла в одной папке. Например, у меня есть большой массив и я хочу классифицировать его как равномерный и неравномерный. Это означает, что сначала я создаю папку с:

string path1 = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\MyArray";
if (!Directory.Exists(path1))
{
    Directory.CreateDirectory(path1);
}

Чтобы классифицировать мой массив, сначала l oop с For, а затем go с% 2, чтобы проверить, является ли он четным или неровным.

string pathEven = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\MyArray\\Even.txt";

string pathUnEven = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\MyArray\\UnEven.txt";

if(Array[i] % 2 == 0){
    using (StreamWriter sw = File.AppendText(pathEven)) 
    {
        sw.WriteLine(Array[i]);
    } 
} else {
    using (StreamWriter sw = File.AppendText(pathUnEven)) 
    {
        sw.WriteLine(Array[i]);
    } 
}

При запуске приложения возникает следующее исключение:

System.IO.IOException: процесс не может получить доступ к файлу "C: \ User \ MyAcc \ Desktop \ MyArray \ Even.txt ", поскольку он используется другим процессом.

Когда я сохраняю оба файла на рабочем столе без папки, это работает?!

1 Ответ

0 голосов
/ 24 марта 2020

Попробуйте с File.Open передачей FileShare.

string pathEven = 
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
    + "\\MyArray\\Even.txt";

string pathUnEven = 
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
    + "\\MyArray\\UnEven.txt";

using(
    var fileStream = 
        File.Open(
            Array[i] % 2 == 0
                ? pathEven
                : pathUnEven, 
            FileMode.OpenOrCreate, 
            FileAccess.Write,
            FileShare.ReadWrite))
using (var sw = new StreamWriter(fileStream))
{
    sw.Seek(0, SeekOrigin.End);
    foreach(var item in Array)
    {
        sw.WriteLine(item.ToString());
    }
    sw.Flush();
}
...