Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Filhantering, ID3

Postades av 2005-01-20 12:45:14 - Jimmy Mattsson, i forum c# (c-sharp), Tråden har 1 Kommentarer och lästs av 619 personer

Jag försöker göra ett program som kan ändra och lägga till ID3 information för en mp3 fil. Jag har lyckats fått den att kunna ändra på informationen men inte att lägga till. Värt att veta är att ID3 alltid ligger i slutet av filen och börjar med "TAG".

Felmedelandet jag får är att index ligger utanför arrayen.

	public void ChangeID3(string path, getID3 myID3)
	{
		byte[] buffer = new byte[1024];
		int pos = 0;

		try
		{        
			using (FileStream fs = File.OpenRead("C:\\test.txt")) 
			{      
				byte[] b = new byte[1024];				
		
				while (fs.Read(b,0,b.Length) > 0) 
				{
					for(int i = 0; i < b.Length; i++)
					{
						pos = i;
						//Kollar om "TAG" är i slutet av filen isf finns id3 info
						if(b[i] == 84 && b[i + 1] == 65 && b[i + 2] == 71)
						{	
							buffer = ReturnBuffer(buffer, i, myID3);
							i = b.Length;
						}
						else if (i == b.Length - 1)
						{
//Här genereras felet.
							buffer[i] = b[i];
							buffer = ReturnBuffer(buffer, i, myID3);
						}
						else
						{
							buffer[i] = b[i];
						}
						
					}
				}
				fs.Close();
			}

			using (FileStream fs = File.OpenWrite("C:\\test.txt")) 
			{ 
				for(int i = 0; i < buffer.Length; i++)
				{			
					if(buffer[i] != Convert.ToByte('|') && buffer[i+1] != Convert.ToByte('|') && buffer[i+2] != Convert.ToByte('|'))
						fs.WriteByte(buffer[i]);
					else
					{
						fs.SetLength(Convert.ToInt64(i));
						i = buffer.Length;
					}
				}
				fs.Close();
			}			
		}
		catch (Exception e)
		{
			MessageBox.Show(e.ToString());
		}

		
	}

	private byte[] ReturnBuffer(byte[] buffer, int pos, getID3 myID3)
	{
		char[] charArray;

		buffer[pos] = Convert.ToByte('T');
		pos++;
		buffer[pos] = Convert.ToByte('A');
		pos++;
		buffer[pos] = Convert.ToByte('G');
		pos++;

		charArray = myID3.Title.ToCharArray();
		for(int i = 0; i < charArray.Length; i++)
		{
			if(charArray[i] != 0)
				buffer[pos] = Convert.ToByte(charArray[i]);
			pos++;
		}
		for(int i = 0; i < 30-charArray.Length; i++)
		{
			buffer[pos] = 0;

			pos++;
		}

		charArray = myID3.Artist.ToCharArray();
		for(int i = 0; i < charArray.Length; i++)
		{
			if(charArray[i] != 0)
				buffer[pos] = Convert.ToByte(charArray[i]);
			pos++;
		}
		for(int i = 0; i < 30-charArray.Length; i++)
		{
			buffer[pos] = 0;

			pos++;
		}

		charArray = myID3.Album.ToCharArray();
		for(int i = 0; i < charArray.Length; i++)
		{
			if(charArray[i] != 0)
				buffer[pos] = Convert.ToByte(charArray[i]);
			pos++;
		}
		for(int i = 0; i < 30-charArray.Length; i++)
		{
			buffer[pos] = 0;

			pos++;
		}

		charArray = myID3.Year.ToCharArray();
		for(int i = 0; i < charArray.Length; i++)
		{
			if(charArray[i] != 0)
				buffer[pos] = Convert.ToByte(charArray[i]);
			pos++;
		}
		for(int i = 0; i < 4-charArray.Length; i++)
		{
			buffer[pos] = 0;

			pos++;
		}

		charArray = myID3.Comment.ToCharArray();
		for(int i = 0; i < charArray.Length; i++)
		{
			if(charArray[i] != 0)
				buffer[pos] = Convert.ToByte(charArray[i]);
			pos++;
		}
		for(int i = 0; i < 30-charArray.Length; i++)
		{
			buffer[pos] = 0;

			pos++;
		}

		charArray = myID3.Track.ToCharArray();
		for(int i = 0; i < charArray.Length; i++)
		{
			if(charArray[i] != 0)
				buffer[pos] = Convert.ToByte(charArray[i]);
			pos++;
		}
		for(int i = 0; i < 2-charArray.Length; i++)
		{
			buffer[pos] = 0;

			pos++;
		}

		buffer[pos] = Convert.ToByte('|');
		pos++;
		buffer[pos] = Convert.ToByte('|');
		pos++;
		buffer[pos] = Convert.ToByte('|');
		pos++;

		return buffer;
	}




Svara

Sv: Filhantering, ID3

Postades av 2005-01-20 18:13:18 - Jimmy Mattsson

Löste det själv, dock tack vare en annan tråd i forumet som tipsade mig om att använda stingbuilder


	public void ChangeID3(string path, getID3 myID3)
	{
		StringBuilder myString = new StringBuilder();

		try
		{        
			using (FileStream fs = File.OpenRead(path)) 
			{      
				byte[] b = new byte[1024];				
		
				while (fs.Read(b,0,b.Length) > 0) 
				{
					for(int i = 0; i < b.Length; i++)
					{
						//Kollar om "TAG" är i slutet av filen isf finns id3 info
						if(b[i] == 84 && b[i + 1] == 65 && b[i + 2] == 71)
							i = b.Length;
						else
							myString.Append(Convert.ToChar(b[i]));
					}
					myString.Append(ReturnBuffer(myID3));
				}
				fs.Close();
			}

			using (FileStream fs = File.OpenWrite(path)) 
			{ 
				for(int i = 0; i < myString.Length; i++)
				{			
					if(myString[i] != Convert.ToByte('|') && myString[i+1] != Convert.ToByte('|') && myString[i+2] != Convert.ToByte('|'))
						fs.WriteByte(Convert.ToByte(myString[i]));
					else
					{
						fs.SetLength(Convert.ToInt64(i));
						i = myString.Length;
					}
				}
				fs.Close();
			}			
		}
		catch (Exception e)
		{
			MessageBox.Show(e.ToString());
		}
	}

	private StringBuilder ReturnBuffer(getID3 myID3)
	{
		StringBuilder myString = new StringBuilder();
		
		myString.Append("TAG");
//Title
		for(int i = 0; i < myID3.Title.Length; i++)
		{
			if(myID3.Title[i] != 0)
				myString.Append(myID3.Title[i]);
		}
		for(int i = 0; i < 30-myID3.Title.Length; i++)
		{
			myString.Append(Convert.ToChar(Convert.ToByte(0)));
		}
//Artist
		for(int i = 0; i < myID3.Artist.Length; i++)
		{
			if(myID3.Artist[i] != 0)
				myString.Append(myID3.Artist[i]);
		}
		for(int i = 0; i < 30-myID3.Artist.Length; i++)
		{
			myString.Append(Convert.ToChar(Convert.ToByte(0)));
		}
//Album
		for(int i = 0; i < myID3.Album.Length; i++)
		{
			if(myID3.Album[i] != 0)
				myString.Append(myID3.Album[i]);
		}
		for(int i = 0; i < 30-myID3.Album.Length; i++)
		{
			myString.Append(Convert.ToChar(Convert.ToByte(0)));
		}
//Year
		for(int i = 0; i < myID3.Year.Length; i++)
		{
			if(myID3.Year[i] != 0)
				myString.Append(myID3.Year[i]);
		}
		for(int i = 0; i < 4-myID3.Year.Length; i++)
		{
			myString.Append(Convert.ToChar(Convert.ToByte(0)));
		}
//Comment
		for(int i = 0; i < myID3.Comment.Length; i++)
		{
			if(myID3.Comment[i] != 0)
				myString.Append(myID3.Comment[i]);
		}
		for(int i = 0; i < 30-myID3.Comment.Length; i++)
		{
			myString.Append(Convert.ToChar(Convert.ToByte(0)));
		}
//Track
		for(int i = 0; i < myID3.Track.Length; i++)
		{
			if(myID3.Track[i] != 0)
				myString.Append(myID3.Track[i]);
		}
		for(int i = 0; i < 2-myID3.Track.Length; i++)
		{
			myString.Append(Convert.ToChar(Convert.ToByte(0)));
		}
//Genre
		myString.Append(myID3.GenreNr);

		myString.Append("|||");

		return myString;
	}


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 165
27 952
271 704
533
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies