Проблема с C#, записывает в файл только при повторном проходе

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28
Добрый день. Подскажите пож.

Не понимаю в чем проблема.

С первого раза файл создается (если отсутствует), но строки в него не записываются.

Чтобы строки записались в файл, приходится ещё раз вручную в PM нажать "далее" на сниппете, чтобы запустить его ещё раз. Тогда строки успешно записываются в файл на диске. Если файл уже создан, то записывает с первого раза.

Почему так?

В настройках списка стоят галочки "загружать из файла" "сохранять изменения списка в файл"

C#:
string PathToNewfilename = (project.Directory + "\\temp\\" + "TASK_IN_WORK_" + project.Variables["Project_Name"].Value + ".txt");
string PathToQueueFile = (project.Directory + "\\temp\\" + project.Variables["queue_filename"].Value + "_" + project.Variables["Project_Name"].Value + ".txt");

//Привязать к файлу задачи
//IZennoList TaskInWork = project.Lists["domains"];
//IZennoList QueueFile = project.Lists["В очереди на добавление в задачу"];
var QueueFile = project.Lists["В очереди на добавление в задачу"];
var TaskInWork = project.Lists["domains"];

QueueFile.Bind(PathToQueueFile);
TaskInWork.Bind(PathToNewfilename);

lock(Locker.QueueFilelock)
{
        // проверяет существует ли фаил
    if (!File.Exists(PathToNewfilename))
    {
    // если фаил не существует, то создает
    File.Create(PathToNewfilename);
    System.Threading.Thread.Sleep(2000);
    }
        //Если в списке меньше 500 строк
if (TaskInWork.Count < 500) //project.Variables["base_for_duplicate_delition_count_lines"].Value = project.Lists["База (список под удаление дулей)"].Count.ToString();
    {
//переносим строки из одного списка в другой
    project.Lists["domains"].AddRange(project.Lists["В очереди на добавление в задачу"].GetItems("0-500",true).ToList());
    }
}
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 248
Благодарностей
674
Баллы
113
Добрый день. Подскажите пож.

Не понимаю в чем проблема.

С первого раза файл создается (если отсутствует), но строки в него не записываются.

Чтобы строки записались в файл, приходится ещё раз вручную в PM нажать "далее" на сниппете, чтобы запустить его ещё раз. Тогда строки успешно записываются в файл на диске. Если файл уже создан, то записывает с первого раза.

Почему так?

В настройках списка стоят галочки "загружать из файла" "сохранять изменения списка в файл"

C#:
string PathToNewfilename = (project.Directory + "\\temp\\" + "TASK_IN_WORK_" + project.Variables["Project_Name"].Value + ".txt");
string PathToQueueFile = (project.Directory + "\\temp\\" + project.Variables["queue_filename"].Value + "_" + project.Variables["Project_Name"].Value + ".txt");

//Привязать к файлу задачи
//IZennoList TaskInWork = project.Lists["domains"];
//IZennoList QueueFile = project.Lists["В очереди на добавление в задачу"];
var QueueFile = project.Lists["В очереди на добавление в задачу"];
var TaskInWork = project.Lists["domains"];

QueueFile.Bind(PathToQueueFile);
TaskInWork.Bind(PathToNewfilename);

lock(Locker.QueueFilelock)
{
        // проверяет существует ли фаил
    if (!File.Exists(PathToNewfilename))
    {
    // если фаил не существует, то создает
    File.Create(PathToNewfilename);
    System.Threading.Thread.Sleep(2000);
    }
        //Если в списке меньше 500 строк
if (TaskInWork.Count < 500) //project.Variables["base_for_duplicate_delition_count_lines"].Value = project.Lists["База (список под удаление дулей)"].Count.ToString();
    {
//переносим строки из одного списка в другой
    project.Lists["domains"].AddRange(project.Lists["В очереди на добавление в задачу"].GetItems("0-500",true).ToList());
    }
}
Потому что в момент создания файл открытый и используется другим потоком, после создания файл надо закрывать, вот так


File.Create(PathToNewfilename).Close();
 
  • Спасибо
Реакции: Devostator

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28
Потому что в момент создания файл открытый и используется другим потоком, после создания файл надо закрывать, вот так


File.Create(PathToNewfilename).Close();
Моя благодарность не имеет границ. Заработало!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)