Україна понад усе! Приєднуйтеся до допомоги!
Вопрос
Как прочитать данные из (CSV) файла? Версия 7.15.3.1649
16 августа 2021 09:47
Добрый день!
Каким образом можно прочитать CSV файл, который находится в сетевой директории? Далее эти данные использовать для создания новых записей в разделе. Версия 7.15.3.1649.
16 августа 2021 14:37
static int check(string uid, string type_need, string license_need, ref string[] dataByUid) { // const string SERVER = "SERVER"; const string USER = "USER"; const string PASSWROD = "PASSWROD"; string type = "image"; string license = ""; long needUidLong = long.Parse(uid); //переводим искомый идентификатор в число для применения половинного деления в отсортированной списке var client = new SftpClient(SERVER, USER, PASSWROD); client.Connect(); var dateTime = DateTime.MinValue.ToUniversalTime(); var needPath = ""; //ищем необходимый файл с последней датой изменения foreach (var file in client.ListDirectory("/bridgeman/")) { if (file.IsDirectory) { continue; } long fileSizeMb = file.Length / 1024 / 1024; //проверяем файл на размер больше 1Мб, чтобы исключить ненужные if (fileSizeMb < 1) { continue; } //проверяем дату изменения if (file.LastWriteTimeUtc > dateTime) { dateTime = file.LastWriteTimeUtc; needPath = file.FullName; } } //если файл с БД не найден завершаем неудачей if (needPath == "") { client.Disconnect(); //return false; return -1; } //Инициализируем поток чтения файла при помощи StreamReader, чтобы считывать построчно StreamReader streamReader = new StreamReader(client.OpenRead(needPath), Encoding.UTF8); //ограничения промежутка //начало отрезка long startByte = 0; //конец отрезка long lastByte = streamReader.BaseStream.Length; //размер половины отрезка, для отслеживания точки останова цикла long halfSize = (lastByte - startByte) / 2; //текущая позиция проверки (середина отрезка) long curCenter = startByte + halfSize; //перехд на нужную позицию streamReader.BaseStream.Position = curCenter; while (halfSize > 2) { //очищаем буфер, очень важно, иначе происходит наложение данных //баг работы StreamReader по сетевому потоку streamReader.DiscardBufferedData(); //считываем сначала битую строку, а потом уже цельную следующую streamReader.ReadLine(); string line = streamReader.ReadLine(); if (line == null) { break; } //формируем массив данных var tsv = line.Split('\t'); if (tsv.Length < 1) { break; } //находим идентификатор string curUid = Regex.Replace(tsv[0], @"[^\d]", ""); if (curUid == "") { break; } long curUidLong = long.Parse(curUid); } streamReader.Close(); client.Disconnect(); return -1; }
это для чтения с ftp csv
17 августа 2021 10:30
Dima Avdoshin,
Спасибо за ответ! Подскажите, куда этот код вставить (создать новый Исходный код или в произвольном нужном месте, типа веб-сервис)?
17 августа 2021 19:51
Pavel Litvinovich, все от задачи зависит, лично у нас реализация через сервис была, и мы вызывали этот код на странице редактирования
24 августа 2021 12:20
Dima Avdoshin,
А какой Using надо подключить для SftpClient?
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать