Работа с блеклистом через project.Context

dian4ik25

Client
Регистрация
17.03.2016
Сообщения
18
Благодарностей
2
Баллы
3
Подскажите, что у меня здесь неправильно?

Все время ошибка в логе:
Процесс не может получить доступ к файлу "E:\Project\data\blacklist\phone.txt", так как этот файл используется другим процессом.

Даже если файл только что создан вручную.

Или неправильный сам подход к работе с файлами?


PHP:
var dirProject = project.Variables["dirProject"].Value;

// Text - текст \ строка
// Mode - режим ("check", "add")
// FilePath - путь к файлу с расширением
project.Context["BlackList"] = (Func<string, string, string, bool>)((Text, Mode, FilePath) => {
    string str = "";
    var blacklist_result = false;
    var directoryName = System.IO.Path.GetDirectoryName(FilePath);
  
    if ( String.IsNullOrEmpty(directoryName) && !Directory.Exists(directoryName) ) { // Путь
        System.IO.Directory.CreateDirectory(directoryName); // Если нет - создаем
    }
  
    if ( !(String.IsNullOrEmpty(FilePath)) && File.Exists(FilePath) ) {  
        System.IO.File.Create(FilePath);
    }
    var listTempBl = System.IO.File.ReadAllLines(FilePath).ToList().Distinct().ToList();
  
    switch (Mode) {
        case "add":
            if ( File.ReadAllLines(FilePath).Length > 1 ) { str = Environment.NewLine; }
            File.AppendAllText(FilePath, str + Text, Encoding.UTF8);
            listTempBl.Clear();
            listTempBl = System.IO.File.ReadAllLines(FilePath).ToList().Distinct().ToList();
            System.IO.File.WriteAllText(FilePath, string.Join(Environment.NewLine, listTempBl));
            Thread.Sleep(2000);
            blacklist_result = true;
            break;
          
        case "check":      
            for(int i=0; i < listTempBl.Count; i++) {
                str = listTempBl[i].Trim();
                if (str.Contains( Text.Trim() )) {
                    blacklist_result =  true;
                } else {
                    blacklist_result =  false;
                }         
            }  
            break;
        default:
            break;
    }
    return blacklist_result;
});
var BlackList = project.Context["BlackList"];


if (!BlackList( "79999999999", "check", Path.Combine(dirProject, @"data\blacklist\phone.txt") )) {
     return "BLACK List";
}
 
Последнее редактирование:

dian4ik25

Client
Регистрация
17.03.2016
Сообщения
18
Благодарностей
2
Баллы
3
Все, нашлась ошибка.

Может пригодится кому то под однопоток

PHP:
project.Context["BlackList"] = (Func<string, string, string, bool>)((Text, Mode, FilePath) => {
    if ( String.IsNullOrEmpty(Text) ) {
        project.SendInfoToLog("Передана пустая строка");
        return true;
    }

    var blacklist_result = false;
    var directoryName = Path.GetDirectoryName(FilePath);

    int counter = 0;

    if ( !(String.IsNullOrEmpty(directoryName)) && !Directory.Exists(directoryName) ) { // Путь
        Directory.CreateDirectory(directoryName); // Если нет - создаем
    }
    switch (Mode) {
        case "add":
            if ( !File.Exists(FilePath) && !(String.IsNullOrEmpty(FilePath)) ) {
                File.Create(FilePath);
            }
            string strBl = "";
            if ( File.ReadAllLines(FilePath).Length > 0 ) { strBl = Environment.NewLine; }
            File.AppendAllText(FilePath, strBl + Text, Encoding.UTF8);
            var listTempBl = File.ReadAllLines(FilePath).ToList().Distinct().ToList();
            File.WriteAllText(FilePath, string.Join(Environment.NewLine, listTempBl));
            Thread.Sleep(2000);
            project.SendInfoToLog("Добавили " + Text + " в " + FilePath);
            return true;
            break;
    
        case "check":
            if ( !File.Exists(FilePath) && !(String.IsNullOrEmpty(FilePath)) ) {
                  project.SendInfoToLog("Передан пустой путь или файл не существует");
                  return true;
            }
            listTempBl = File.ReadAllLines(FilePath).ToList().Distinct().ToList();
            for(int i=0; i < listTempBl.Count; i++) {
                counter++;
                //project.SendInfoToLog("Cчетчик " + counter.ToString() );
                strBl = listTempBl[i].Trim();
                if (strBl.Contains( Text.Trim() )) {
                    project.SendInfoToLog("Нашли совпадение для " + Text + " в " + FilePath );
                    return true;
                } 
            }
            break;
        default:
            project.SendInfoToLog("Ничего не сделали. Режим " + Mode + "не найден");
            break;
    }
    project.SendInfoToLog("Не нашли совпадений для " + Text + " в " + FilePath);
    return blacklist_result;
});
var BlackList = project.Context["BlackList"];

Пример использования
// Добавить в файл
BlackList(proxy_ip,"add",blacklist_path);

или

PHP:
        var file = @"TEMP\proxy.txt";
        var filepath = Path.Combine(dirProject, file);
        var blacklist_path = Path.Combine(dirProject, @"database\blacklist\proxy.txt");
 
        if (File.Exists(filepath)) {
            string[] proxyline;
            int i=0;
            var proxy_ip = "";
            var prefix_line = "";
            do {
                if (i>0) {
                    project.SendInfoToLog("Прокси уже использовался. Берем следующий.");
                    if (Convert.ToInt32(project.Variables["bad_proxy_max"].Value) == i) {
                        return null;
                    }
                }
                proxyline = FileSystem.FileGetLines(filepath, "0", true, true);
                project.SendInfoToLog(proxyline[0]);
                proxy_ip = proxyline[0];
                i++;
            } while ( BlackList(proxy_ip,"check",blacklist_path) );
            if ( File.ReadAllLines(filepath).Length > 1 ) {
                prefix_line = Environment.NewLine;
            }
            File.AppendAllText(filepath, prefix_line + proxyline[0].Trim(), Encoding.UTF8);
            instance.SetProxy(proxyline[0].Trim());
        } else {
            project.SendInfoToLog("Нет доступных прокси");
            return null;
        }
 
Последнее редактирование:
  • Спасибо
Реакции: rich788

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