Как прочитать данные из (CSV) файла? Версия 7.15.3.1649

Добрый день!

Каким образом можно прочитать CSV файл, который находится в сетевой директории? Далее эти данные использовать для создания новых записей в разделе. Версия 7.15.3.1649.

Нравится

4 комментария
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

Dima Avdoshin,

Спасибо за ответ! Подскажите, куда этот код вставить (создать новый Исходный код или в произвольном нужном месте, типа веб-сервис)?

Pavel Litvinovich, все от задачи зависит, лично у нас реализация через сервис была, и мы вызывали этот код на странице редактирования

Dima Avdoshin,

А какой Using надо подключить для SftpClient?

Показать все комментарии