// ---------------------------------------------------------------------------

		public bool SaveTag(String FileName)
		{
			FileInfo Info = new FileInfo();
			MemoryStream Tag;
			bool result = false;

			// Save Vorbis tag    
			Info.Reset();

			if ( GetInfo(FileName, ref Info) )
			{
				// Prepare tag data and save to file
				Info.Tag.FieldData[1] = FTitle.Trim();
				Info.Tag.FieldData[2] = FArtist.Trim();
				Info.Tag.FieldData[3] = FAlbum.Trim();
				if (FTrack > 0) Info.Tag.FieldData[4] = FTrack.ToString();
				else Info.Tag.FieldData[4] = "";
				Info.Tag.FieldData[5] = FDate.Trim();
				Info.Tag.FieldData[6] = FGenre.Trim();
				Info.Tag.FieldData[7] = FComment.Trim();
				Info.Tag.FieldData[8] = "";
				Info.Tag.FieldData[9] = "";
				Tag = BuildTag(Info);
				Info.SPage.Checksum = 0;
				SetLacingValues(ref Info, (int)Tag.Length);
				result = RebuildFile(FileName, Tag, Info);
				Tag.Close();
			}
			return result;
		}
		// ---------------------------------------------------------------------------

		// No explicit destructors with C#

		// ---------------------------------------------------------------------------

		public bool ReadFromFile(String FileName)
		{
			FileInfo Info = new FileInfo();
			bool result = false;

			// Read data from file  
			FResetData();
  
			Info.Reset();

			if ( GetInfo(FileName, ref Info) )
			{
				// Fill variables
				FFileSize = Info.FileSize;
				FChannelModeID = Info.Parameters.ChannelMode;
				FSampleRate = Info.Parameters.SampleRate;
				FBitRateNominal = (ushort)(Info.Parameters.BitRateNominal / 1000); // Integer division
				FSamples = Info.Samples;
				FID3v2Size = Info.ID3v2Size;
				FTitle = Info.Tag.FieldData[1];
				if (Info.Tag.FieldData[2] != "") FArtist = Info.Tag.FieldData[2];
				else FArtist = Info.Tag.FieldData[8];
				FAlbum = Info.Tag.FieldData[3];
				FTrack = GetTrack(Info.Tag.FieldData[4]);
				FDate = Info.Tag.FieldData[5];
				FGenre = Info.Tag.FieldData[6];
				if (Info.Tag.FieldData[7] != "") FComment = Info.Tag.FieldData[7];
				else FComment = Info.Tag.FieldData[9];
				FVendor = Info.Tag.FieldData[0];
				result = true;
			}
			return result;
		}