Создание и наполнение списков на лету. Косяк.

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
Приветствую, коллеги.

Стоит простая задача.

  1. Получить построчно список.
  2. Создать другой список по директории из переменной.
  3. Проверить список из пункта один на содержание ключевых слов.
  4. Если ключевые слова есть, то их заменить на наши.
  5. Сохранить список с расширением HTML в нужную директорию.
Вопрос!

Какого черта не работает?

Код.

PHP:
string fileDirMain = project.Variables["fileDirMain"].Value;
string dirReadyDomains = project.Variables["dirReadyDomains"].Value;
string fileDirDomains = project.Variables["fileDirDomains"].Value;
string fileDirKeys = project.Variables["fileDirKeys"].Value;


IZennoList main = project.Lists["main"];
IZennoList domains = project.Lists["domains"];
IZennoList keyWords_domain = project.Lists["keyWords_domain"];

project.SendInfoToLog("В списке с доменами у нас "+domains.Count()+" доменов");



    for (int i=0;i<domains.Count();i++)
{
string domainNow=domains[0];
    domains.RemoveAt(0);
    domains.Add(domainNow);
   
string strDirPath = dirReadyDomains + @"\"+domainNow;
if(!Directory.Exists(strDirPath)){
    Directory.CreateDirectory(strDirPath);
}


string mainDomain = strDirPath + @"\main.txt";
if(!File.Exists(mainDomain)){
    File.Create(mainDomain);
}
System.Threading.Thread.Sleep(2000);



project.Variables["mainDomain"].Value = mainDomain;
project.SendInfoToLog("Выбрали директорию "+mainDomain);
IZennoList mainToLists = project.Lists["mainToLists"];



string mainNow1 = string.Empty;
project.SendInfoToLog("Тест 2");
foreach (string strMain in main)
{
    string mainNow= Macros.TextProcessing.Spintax(strMain);
   
   
    System.Threading.Thread.Sleep(100);
    mainToLists.Add(mainNow);
   
    System.Threading.Thread.Sleep(100);
    File.WriteAllLines(mainDomain, mainToLists);
   
    System.Threading.Thread.Sleep(100);
}


foreach (string strMain2 in mainToLists)
{
if (strMain2.Contains("CKEY"))
    {
       
    string key=    keyWords_domain[0];
        keyWords_domain.RemoveAt(0);
    string mainNow3 = strMain2.Replace("CKEY", key);
    mainToLists.Add(mainNow3);   
    }
}
project.SendInfoToLog("Объединили список с директорией  "+mainDomain);


System.Threading.Thread.Sleep(2000);
}
Если убрать блок с replace то работает.

Если НЕ убирать. То либо Файл занят другим приложением, либо блин в том варианте как кинул сейчас


И как это всё сохранить под расширением, которое мне надо после всех операций.

Большое спасибо.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 374
Благодарностей
3 298
Баллы
113
foreach не предназначен для добавления, удаления элементов перечисляемого списка.
Попробуй заменить на for.
Примерно:
Код:
for (int i = 0; i <= mainToLists.Count; i++)
{
    // mainToLists[i]
}
 

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
Нет, не работает.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 374
Благодарностей
3 298
Баллы
113

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
Неа, вообще ничего не помогает.
Вечная ошибка
PHP:
Выполнение действия CSharp OwnCode Процесс не может получить доступ к файлу "D:\main.txt", так как этот файл используется другим процессом.
Что за процесс? Хрен его знает.

Еще какие то варианты есть у кого то?
 

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 223
Баллы
113
Скачайте процесс эксплорер и посмотрите каким процессом занят этот файл.
 
  • Спасибо
Реакции: Шива

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 374
Благодарностей
3 298
Баллы
113
Код:
string mainDomain = strDirPath + @"\main.txt";
if(!File.Exists(mainDomain)){
   File.Create(mainDomain);
}
System.Threading.Thread.Sleep(2000);
project.Variables["mainDomain"].Value = mainDomain;
project.SendInfoToLog("Выбрали директорию "+mainDomain);
IZennoList mainToLists = project.Lists["mainToLists"];
string mainNow1 = string.Empty;
project.SendInfoToLog("Тест 2");
foreach (string strMain in main)
{
   string mainNow= Macros.TextProcessing.Spintax(strMain);
   System.Threading.Thread.Sleep(100);
   mainToLists.Add(mainNow);
   System.Threading.Thread.Sleep(100);
   File.WriteAllLines(mainDomain, mainToLists);
   System.Threading.Thread.Sleep(100);
}
Тут явно не то. base.exe будет блочить файл.

И main.txt это список? и чем обычный список C# не подходить?
Код:
List<string> mainlist = new List<string>();
или переменная.
 

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
Код:
string mainDomain = strDirPath + @"\main.txt";
if(!File.Exists(mainDomain)){
   File.Create(mainDomain);
}
System.Threading.Thread.Sleep(2000);
project.Variables["mainDomain"].Value = mainDomain;
project.SendInfoToLog("Выбрали директорию "+mainDomain);
IZennoList mainToLists = project.Lists["mainToLists"];
string mainNow1 = string.Empty;
project.SendInfoToLog("Тест 2");
foreach (string strMain in main)
{
   string mainNow= Macros.TextProcessing.Spintax(strMain);
   System.Threading.Thread.Sleep(100);
   mainToLists.Add(mainNow);
   System.Threading.Thread.Sleep(100);
   File.WriteAllLines(mainDomain, mainToLists);
   System.Threading.Thread.Sleep(100);
}
Тут явно не то. base.exe будет блочить файл.

И main.txt это список? и чем обычный список C# не подходить?
Код:
List<string> mainlist = new List<string>();
или переменная.
Так мне то надо укладывать это в физический список. Вот в чем дело.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 374
Благодарностей
3 298
Баллы
113
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 374
Благодарностей
3 298
Баллы
113
  • Спасибо
Реакции: takerz

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
И ещё, после создания файла, его надо освободить:
Код:
File.Create(path).Close();
Нижайший тебе поклон, друже!

Теперь бы разобраться почему если перевести файл в расширение html
такая вакханалия творится.

исходный файл в utf-8
 

inilim

Client
Регистрация
16.09.2017
Сообщения
441
Благодарностей
170
Баллы
43
преобразуй в utf через notepad++. Даже если он в utf все равно преобразуй.
 

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
преобразуй в utf через notepad++. Даже если он в utf все равно преобразуй.
Неа, не робит.

Да и к тому же у меня таких файлов будет примерно сотня например. Открывать каждый?
Зеннопостер должен справляться.
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8

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