Перейти к содержанию

Помогите разобраться с библиотекой


Рекомендуемые сообщения

Добрый день. Пишу программу, реализующую скачивание с фтп(суть - фтп клиент).Использую библиотеку стороннего разработчика - BytesRoad.Net.FTP.dll . Собственно все работает отлично,с библиотекой,точнее ее основными функциями разобрался, но возникла необходимость в реализации докачки файлов с сервера, той функцией,которой я пользуюсь - не получается это реализовать(файл скачивается с начала). У этой функции есть несколько разных вариантов(с разными параметрами),в одном из таких вариантов я нашел параметр offset(сдвиг),и подумал,что это оно и есть, но разобраться не смог. Я уверен,что в этой библиотеке есть докачка, но как ее использовать - не пойму, объясните нубу пожалуйста..

Прибегнуть к FTPWebRequest - последний выход,если не получится разобраться с этой библиотекой.

p.s. библиотеку прикладываю к сообщениюBytesRoad.Net.Ftp.zip. Надеюсь на вашу помощь. Разработка ведется в VS c# Express 2010. Тип приложения - WPF.

 

 

Вот список вариантов функции GetFile:

public byte[ ] GetFile(int timeout, string path)
public byte[ ] GetFile(int timeout, string path, long offset, long length)
public void GetFile(int timeout, string destPath, string path) - этот метод использую сейчас
public void GetFile(int timeout, string destPath, string path, long offset, long length)
public void GetFile(int timeout, unknown-type userStream, string path)
public void GetFile(int timeout, unknown-type userStream, string path, long offset, long length)

 

 

upd. разобрался с одним методом , но не смог настроить его работу.

public void GetFile(int timeout, string destPath, string path, long offset, long length) - тут основные параметры - куда сохранять файл, какой файл, сдвиг скачивания,размер файла... Передаю параметры - длина текущего файла(того,что уже есть) размер файла на сервер(этот параметр тоже получаю).. Итого по-сути должно работать так: первый запуск, из 5 МБ скачался 1 МБ, завершил работу, запустил в параметрах передается сдвиг - 1МБ, размер - 5 МБ. По идее должен начать качать со 2-го МБайта, он так и делает, только вместо того,чтобы дописывать к уже существующему файлу, он стирает его и начинает качать новый со "смещением", т.е. в конце загрузки файл получается меньше на размер сдвига.

 

Решение я постараюсь найти и выложить тут, т.к. очень популярный вопрос, а готовое решение многих порадует, надеюсь на вашу помощь.

Ссылка на комментарий
Поделиться на другие сайты

Я для большей вероятности помощи, написал сообщение на cyberforum.ru. Там за весь день ответили мне следующее:

Посмотрите другие методы - вам нужен AppendToFile.

Я нашел этот метод,он действительно есть в библиотеке, с разными вариантами(т.е. параметры разные):

public void AppendToFile(int timeout, string path, byte[ ] data)
public void AppendToFile(int timeout, string path, byte[ ] data, long offset, long length)
public void AppendToFile(int timeout, string path, string srcPath)
public void AppendToFile(int timeout, string path, string srcPath, long offset, long length)
public void AppendToFile(int timeout, string path, unknown-type userStream)
public void AppendToFile(int timeout, string path, unknown-type userStream, long offset, long length)

 

Насколько правильно я понял - этот метод должен дописывать в файл, но я не понял, скачивает ли он сам, или ему нужны разные части одного файла,чтобы объединить их.

Использую этот вариант public void AppendToFile(int timeout, string path, string srcPath, long offset, long length),здесь как я понял параметры следующие - srcPath-путь к файлу на диске, offset-сдвиг,length-размер файла на сервере. При попытке указать параметры типа(таймаут, имя файла, путь к файлу в папке,размер файла на диске(это по-сути и есть сдвиг),размер файла на сервере) - вылетает на исключение с ошибкой: "Операция не удалась".

Ссылка на комментарий
Поделиться на другие сайты

Так-с... Если кому будет это интересно, я разобрался, может конечно коряво все сделал, но главное работает.

if (File.Exists(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2)) // проверяем есть ли в папке файл с таким именем 
{ 
 FileInfo fileInfo = new FileInfo(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2);//если есть, то получаем его размер 
 num3 = fileInfo.Length;//получаем размер файла 
} 
else 
{ 
num3 = 0L; 
} 
try 
{ 
WriteLog("Попытка скачивания файла с сервера"); 
string str = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка"; //путь, откуда запускается программа, туда файл скачивается 
long itemsFromFtp2 = this.GetItemsFromFtp(ftpClient, num2, text2);//получаем информацию о файле(его размер) 
if (itemsFromFtp2 != 0) //если размер файла на сервере не равен 0, то будем качать его 
{ 
this.progressBar1.Value = 0;//ставим начальное значение прогрессбара 
this.progressBar1.Maximum = (int)itemsFromFtp2;//ставим максимальный размер файла   
if (File.Exists(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2) && num3 < itemsFromFtp) //если файл уже есть и его размер меньше размера на сервере, то  
{ 
  File.Move(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2,System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2 + ".tmp");//переименовываем файл в .tmp (просто добавляем в конец имени) 
  ftpClient.GetFile(num2, str + "\\" + text2, text2, num3, itemsFromFtp);//качаем файл с сервера со сдвигом(num3-размер уже существующей части файла на диске,itemsFromFtp-размер файла на сервере) 
} 
else //если файла вообще нет на диске, то запускается обычное скачивание 
{		  
 ftpClient.GetFile(num2, str + "\\" + text2, text2);//получаем файл									 
} 
ftpClient.Disconnect(num2);//отключаемся от клиента 
} 
else //если размер файла равен 0 или его нет, то делаем запись в лог-файл и выводим всплывающее сообщение 
{ 
 WriteLog("Файла " + text2 + " нет на сервере!"); 
 this.SetBalloonTip("Файла " + text2 + " нет на сервере!"); 
} 
} 
catch (Exception e)//если не получается скачать выводит ошибку,запись в лог-файл 
{ 
 WriteLog("{0} Exception caught." + e); 
 this.SetBalloonTip("Ошибка скачивания файла!"); 
} 
finally //в любом случае после исполнения попытки делаем следующие вещи 
{ 
 byte[] dat = System.IO.File.ReadAllBytes(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2); //в массив байт считываем только что скаченный кусок файла 
 byte[] dat1 = System.IO.File.ReadAllBytes(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2 + ".tmp");  //в массив байт считываем уже существующий кусок файла 
 File.Move(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2, System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2 + ".tmp2"); // переименовываем файл(в принципе можно сразу удалить,не делая лишних действий) 
 byte[] final = dat1.Concat(dat).ToArray(); //создаем еще один массив, в котором объединяем 2 предыдущих 
 System.IO.File.WriteAllBytes(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2, final);//сохраняем массив байт в файл 
 File.Delete(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2 + ".tmp");//удаляем временные файлы, которые являются частями 
 File.Delete(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\Папка\\" + text2 + ".tmp2");//удаляем временные файлы, которые являются частями 
}

 

p.s. надеюсь поможет кому-нибудь... На 3-х форумах написал, в итоге сам разобрался) После долгих мучений

Ссылка на комментарий
Поделиться на другие сайты

Ты ж сразу с FTP можешь получить файл в массиве байт и делай что хочешь с массивом.

public byte[ ] GetFile(int timeout, string path)
public byte[ ] GetFile(int timeout, string path, long offset, long length)

Ссылка на комментарий
Поделиться на другие сайты

Было бы все так просто... Проблема заключалась в том, что при обрыве соединения в этом массиве ничего не остается, он заполняется только при полном завершении закачки.Я испробовал все методы, какие можно:) Поэтому тот вариант,который я указал выше - самый оптимальный,на мой взгляд:)

Ссылка на комментарий
Поделиться на другие сайты

У этой библиотеке есть методы на все случаи жизни. Выложи код в котором этот метод вызывает исключение - public void AppendToFile(int timeout, string path, string srcPath, long offset, long length)

Ссылка на комментарий
Поделиться на другие сайты

У этой библиотеке есть методы на все случаи жизни. Выложи код в котором этот метод вызывает исключение - public void AppendToFile(int timeout, string path, string srcPath, long offset, long length)

Тут одна функция вызывает другую, вот код:

public void AppendToFile(int timeout, string path, string srcPath, long offset, long length)
{
  this.CheckReadyForCmd();
  timeout = this.GetTimeoutValue(timeout);
  this.ThrowIfNull("srcPath", (object) srcPath);
  this.ThrowIfNull("path", (object) path);
  this.ThrowIfNegative("length", length);
  this.ThrowIfNegative("offset", offset);
  FileStream fileStream = System.IO.File.Open(srcPath, FileMode.Open, FileAccess.Read, FileShare.Read);
  try
  {
	if (length > fileStream.Length)
	  length = fileStream.Length;
	this.AppendToFile(timeout, path, (Stream) fileStream, offset, length);
  }
  finally
  {
	fileStream.Close();
  }
}


public void AppendToFile(int timeout, string path, Stream userStream, long offset, long length)
{
  this.CheckReadyForCmd();
  timeout = this.GetTimeoutValue(timeout);
  this.ThrowIfNull("path", (object) path);
  this.ThrowIfNull("userStream", (object) userStream);
  this.ThrowIfNegative("length", length);
  this.SetProgress(true);
  try
  {
	if (offset >= 0L)
	  userStream.Seek(offset, SeekOrigin.Begin);
	FtpClient ftpClient;
	Monitor.Enter((object) (ftpClient = this));
	try
	{
	  if (!this._disposed)
	  {
		this._cmdAppendToFile = new Cmd_AppendToFile(this);
		this._currentCmd = (IDisposable) this._cmdAppendToFile;
	  }
	}
	finally
	{
	  Monitor.Exit((object) ftpClient);
	}
	this.CheckDisposed();
	this._cmdAppendToFile.Execute(timeout, userStream, path, length);
  }
  catch (FtpFatalErrorException ex)
  {
	this.DisconnectInternal();
	throw;
  }
  catch (SocketException ex)
  {
	this.DisconnectInternal();
	throw;
  }
  finally
  {
	this._currentCmd = (IDisposable) null;
	this._cmdAppendToFile = (Cmd_AppendToFile) null;
	this.SetProgress(false);
	this.CheckDisposed();
  }
}

 

p.s. код может отличаться от оригинала, т.к. оригинала нет у меня, я прогнал через декомпилятор эти библиотеки и вытащил оттуда код.

Ссылка на комментарий
Поделиться на другие сайты

Все понятно, этот метод докачивает файл из локального каталога на FTP. Тебе надо использовать следующие методы:

/// 
	/// <summary>
	/// Download file to the stream specified.
	/// </summary>
	/// 
	/// <param name="timeout">
	/// Time out period for each "atomic" operation 
	/// participating to complete the whole operation.
	/// Specify zero or
	/// <see cref="System.Threading.Timeout.Infinite">Timeout.Infinite</see>
	/// for no time out. See the Remarks section for more 
	/// information.
	/// </param>
	/// 
	/// <param name="path">
	/// A string that contains path of the file to download.
	/// </param>
	/// 
	/// <param name="userStream">
	/// The stream to which the downloading data will written.
	/// </param>
	/// 
	/// <remarks>
	/// The <b>GetFile</b> method synchronously download the
	/// file from the FTP server to the specified stream. Received 
	/// data synchronously written to the stream as it arrives.
	/// The data channel
	/// used for downloading configured either in ascii 
	/// or in binary mode depending of the 
	/// <see cref="BytesRoad.Net.Ftp.FtpClient.DataType">FtpDataType</see>
	/// property value. <b>GetFile</b> method blocks
	/// until the operation is completed or exception is thrown.
	/// Throw 
	/// <see cref="System.InvalidOperationException">InvalidOperationException</see> 
	/// exception if
	/// <see cref="BytesRoad.Net.Ftp.FtpClient">FtpClient</see> 
	/// is not connected to the FTP server or if
	/// there is another operation is in progress.
	/// 
	/// <para>
	/// The 
	/// <see cref="BytesRoad.Net.Ftp.FtpTimeoutException">FtpTimeoutException</see>
	/// exception will be thrown if one of the "atomic" operation
	/// was times out. The <b>FtpTimeoutException</b> as well as
	/// <see cref="BytesRoad.Net.Ftp.FtpProtocolException">FtpProtocolException</see>
	/// and
	/// <see cref="System.Net.Sockets.SocketException">SocketException</see>
	/// are fatal exceptions. If one of them is thrown the connection
	/// with FTP server will be terminated. To continue work you need
	/// to establish connection again.
	/// </para>
	/// 
	/// <para>
	/// Note that the value of <i>timeout</i> parameter doesn't define the 
	/// period of time within which the operation should be completed, 
	/// instead it defines time out period for each "atomic" operation 
	/// participating to complete the whole operation. In practice
	/// it is possible that the whole operation may take a time which 
	/// is little shorter then the time specified by <i>timeout</i> parameter
	/// multiplied by the number of "atomic" operation.
	/// </para>
	/// </remarks>
	/// <exception cref="System.ObjectDisposedException">
	/// The <see cref="BytesRoad.Net.Ftp.FtpClient">FtpClient</see>
	/// object was disposed.
	/// </exception>
	/// <exception cref="System.InvalidOperationException">
	/// Other operation is in progress.
	/// <para>-or-</para>
	/// The <see cref="BytesRoad.Net.Ftp.FtpClient">FtpClient</see>
	/// is not connected.
	/// </exception>
	/// <exception cref="System.ArgumentOutOfRangeException">
	///	<i>timeout</i> is less then zero and not equals to
	/// <see cref="System.Threading.Timeout.Infinite">Timeout.Infinite</see>.
	/// </exception>
	/// <exception cref="System.ArgumentNullException">
	/// <i>path</i> is null reference (<b>Nothing</b> in
	/// Visual Basic).
	/// <para>-or-</para>
	/// <i>userStream</i> is null reference (<b>Nothing</b> in
	/// Visual Basic).
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpProtocolException">
	/// Violation of FTP protocol occurs. Connection with the
	/// FTP server will be terminated.
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpTimeoutException">
	/// One of the "atomic" operation was times out. Connection with
	/// the FTP server will be terminated. See the Remarks section 
	/// for more information.
	/// </exception>
	/// <exception cref="System.Net.Sockets.SocketException">
	/// An error occurred when attempting to access
	/// the socket used to complete requested operation.
	/// Connection with the FTP server will be terminated.
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpErrorException">
	/// The FTP server returns negative response.
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpAbortedException">
	/// Downloading was aborted by 
	/// <see cref="BytesRoad.Net.Ftp.FtpClient.Abort">Abort</see>, 
	/// <see cref="BytesRoad.Net.Ftp.FtpClient.Reset">Reset</see>
	/// methods or their asynchronous versions.
	/// </exception>
	public void GetFile(int timeout, Stream userStream,
		string path)
	{
		GetFile(timeout, userStream, path, 0, long.MaxValue);
	}

	/// <summary>
	/// Download part of the file to the stream specified.
	/// </summary>
	/// 
	/// <param name="timeout">
	/// Time out period for each "atomic" operation 
	/// participating to complete the whole operation.
	/// Specify zero or
	/// <see cref="System.Threading.Timeout.Infinite">Timeout.Infinite</see>
	/// for no time out. See the Remarks section for more 
	/// information.
	/// </param>
	/// 
	/// <param name="path">
	/// A string that contains path of the file to download.
	/// </param>
	/// 
	/// <param name="offset">
	/// Offset from beginning of the file where the 
	/// downloads should start. The value cannot be negtive.
	/// </param>
	/// 
	/// <param name="length">
	/// Number of bytes to download.
	/// </param>
	/// 
	/// <param name="userStream">
	/// The stream to which the downloading data will written.
	/// </param>
	/// 
	/// <remarks>
	/// The <b>GetFile</b> method synchronously download the part of the
	/// file from the FTP server to specified stream. Received 
	/// data synchronously written to the stream as it arrives.
	/// The data channel
	/// used for downloading configured either in ascii 
	/// or in binary mode depending of the 
	/// <see cref="BytesRoad.Net.Ftp.FtpClient.DataType">FtpDataType</see>
	/// property value. <b>GetFile</b> method blocks
	/// until the operation is completed or exception is thrown.
	/// Throw 
	/// <see cref="System.InvalidOperationException">InvalidOperationException</see> 
	/// exception if
	/// <see cref="BytesRoad.Net.Ftp.FtpClient">FtpClient</see> 
	/// is not connected to the FTP server or if
	/// there is another operation is in progress.
	/// 
	/// <para>
	/// Note that not all FTP servers support downloading from the
	/// middle of the file. If this is a case the 
	/// <see cref="BytesRoad.Net.Ftp.FtpRestartNotSupportedException">FtpRestartNotSupportedException</see>
	/// exception will be thrown.
	/// </para>
	/// 
	/// <para>
	/// The 
	/// <see cref="BytesRoad.Net.Ftp.FtpTimeoutException">FtpTimeoutException</see>
	/// exception will be thrown if one of the "atomic" operation
	/// was times out. The <b>FtpTimeoutException</b> as well as
	/// <see cref="BytesRoad.Net.Ftp.FtpProtocolException">FtpProtocolException</see>
	/// and
	/// <see cref="System.Net.Sockets.SocketException">SocketException</see>
	/// are fatal exceptions. If one of them is thrown the connection
	/// with FTP server will be terminated. To continue work you need
	/// to establish connection again.
	/// </para>
	/// 
	/// <para>
	/// Note that the value of <i>timeout</i> parameter doesn't define the 
	/// period of time within which the operation should be completed, 
	/// instead it defines time out period for each "atomic" operation 
	/// participating to complete the whole operation. In practice
	/// it is possible that the whole operation may take a time which 
	/// is little shorter then the time specified by <i>timeout</i> parameter
	/// multiplied by the number of "atomic" operation.
	/// </para>
	/// </remarks>
	/// <exception cref="System.ObjectDisposedException">
	/// The <see cref="BytesRoad.Net.Ftp.FtpClient">FtpClient</see>
	/// object was disposed.
	/// </exception>
	/// <exception cref="System.InvalidOperationException">
	/// Other operation is in progress.
	/// <para>-or-</para>
	/// The <see cref="BytesRoad.Net.Ftp.FtpClient">FtpClient</see>
	/// is not connected.
	/// </exception>
	/// <exception cref="System.ArgumentOutOfRangeException">
	///	<i>timeout</i> is less then zero and not equals to
	/// <see cref="System.Threading.Timeout.Infinite">Timeout.Infinite</see>.
	/// <para>-or-</para>
	/// <i>offset</i> or <i>length</i> is negative.
	/// </exception>
	/// <exception cref="System.ArgumentNullException">
	/// <i>path</i> is null reference (<b>Nothing</b> in
	/// Visual Basic).
	/// <para>-or-</para>
	/// <i>userStream</i> is null reference (<b>Nothing</b> in
	/// Visual Basic).
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpProtocolException">
	/// Violation of FTP protocol occurs. Connection with the
	/// FTP server will be terminated.
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpTimeoutException">
	/// One of the "atomic" operation was times out. Connection with
	/// the FTP server will be terminated. See the Remarks section 
	/// for more information.
	/// </exception>
	/// <exception cref="System.Net.Sockets.SocketException">
	/// An error occurred when attempting to access
	/// the socket used to complete requested operation.
	/// Connection with the FTP server will be terminated.
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpErrorException">
	/// The FTP server returns negative response.
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpAbortedException">
	/// Downloading was aborted by 
	/// <see cref="BytesRoad.Net.Ftp.FtpClient.Abort">Abort</see>, 
	/// <see cref="BytesRoad.Net.Ftp.FtpClient.Reset">Reset</see>
	/// methods or their asynchronous versions.
	/// </exception>
	/// <exception cref="BytesRoad.Net.Ftp.FtpRestartNotSupportedException">
	/// The FTP server do not support downloading from the middle
	/// of the file.
	/// </exception>
	public void GetFile(int timeout, Stream userStream,
		string path, long offset, long length)
	{
		CheckReadyForCmd();
		timeout = GetTimeoutValue(timeout);
		ThrowIfNull("path", path);
		ThrowIfNull("userStream", userStream);
		ThrowIfNegative("offset", offset);
		ThrowIfNegative("length", length);

		SetProgress(true);
		try
		{
			lock(this)
			{
				if(!_disposed)
				{
					_cmdGetFile = new Cmd_GetFile(this);
					_currentCmd = _cmdGetFile;
				}
			}
			CheckDisposed();

			_cmdGetFile.Execute(timeout, 
				userStream, 
				path, 
				offset,
				length);
		}
		catch(FtpFatalErrorException)
		{
			DisconnectInternal();
			throw;
		}
		catch(SocketException)
		{
			DisconnectInternal();
			throw;
		}
		finally
		{
			_cmdGetFile.Dispose();
			_cmdGetFile = null;
			_currentCmd = null;
			SetProgress(false);
			CheckDisposed();
		}
	}

Ссылка на комментарий
Поделиться на другие сайты

За наводку спасибо) Понял в чем проблема была. Я использовал другие методы для докачки, и файл качался, проблема была в том,что он не дописывал инфу, а тупо затирал и создавал новый, поэтому и стал предыдущему файлу присваивать имя tmp, а потом объединять их. Попробую разобраться и открыть существующий файл для записи, и использовать поток записи. Спасибо.

--------------------------------------------------------------upd--------------------------------------------------------------------

 

 

FileStream file = File.Open(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\папка\\" + text2,FileMode.Open); //создаем поток,открывая файл для записи
file.Seek(num3,SeekOrigin.Begin);//указываем позицию,с которой начнется запись в файл(num3-сдвиг)
ftpClient.GetFile(num2, file, text2, num3, itemsFromFtp);//функция докачки public void GetFile(int timeout, Stream userStream, string path, long offset, long length) 
file.Close();//обязательно закрываем поток! иначе файл все время будет занят,пока программу не "убьете"

 

Вот этим маленьким кусочком осуществляется докачка. Большое спасибо gekon, за то,что навел на мысль:)

Ссылка на комментарий
Поделиться на другие сайты

Какой смысл тут спрашивать, где одни дилетанты.

Ищи ответы на специализированных форумах, тем более по IT вопросам :D

Ссылка на комментарий
Поделиться на другие сайты

Какой смысл тут спрашивать, где одни дилетанты.

Ищи ответы на специализированных форумах, тем более по IT вопросам :D

Во втором сообщении я написал, что создал подобные темы на 3-х форумах: этот, cyberforum и programmingforum.. На киберфоруме мне сказали искать в сторону AppendToFile, потом я сам придумал метод, и уже на путь истинный меня наставили тут.. Так что пусть люди показывают что они знают.. Просто порой читая разные сообщения,складывается ощущение,что тут все боги программирования:) Вот я и решил обратиться за помощью к "богам".Не вижу ничего зазорного в том, чтобы попросить помощи:)

Ссылка на комментарий
Поделиться на другие сайты

Во втором сообщении я написал, что создал подобные темы на 3-х форумах: этот, cyberforum и programmingforum.. На киберфоруме мне сказали искать в сторону AppendToFile, потом я сам придумал метод, и уже на путь истинный меня наставили тут.. Так что пусть люди показывают что они знают.. Просто порой читая разные сообщения,складывается ощущение,что тут все боги программирования:) Вот я и решил обратиться за помощью к "богам".Не вижу ничего зазорного в том, чтобы попросить помощи:)

У меня тоже кстати складывается такое мнение) Поэтому я и высказался :)

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

×
×
  • Создать...