Stoppa strängar i FileInfo[] i c#

Permalänk
Medlem

Stoppa strängar i FileInfo[] i c#

Mitt program läser först in filnamnet på alla filer från en viss mapp. De lagras i 'FileInfo[] filer'.
Om jag istället vill läsa in filnamn som är lagrade i en listbox till FileInfo[] filer, hur går jag då?

Visa signatur

Vem har bajsat i min termos?

Permalänk
Medlem

Något i stil med detta?
OBS! Koden är inte kompileringstestad.

FileInfo[] filer = new FileInfo[listbox.Items.Count]; for(int i = 0; i < listbox.Items.Count; i++) { filer[i] = new FileInfo(listbox.Items[i]); }

Permalänk
Skrivet av Garret:

Något i stil med detta?
OBS! Koden är inte kompileringstestad.

FileInfo[] filer = new FileInfo[listbox.Items.Count]; for(int i = 0; i < listbox.Items.Count; i++) { filer[i] = new FileInfo(listbox.Items[i]); }

Har ej testat din kod men är det inte så att listbox.Items[i] ger tillbaks object? Så då måste man casta det till en sträng då FileInfo inte har en konstruktor som accepterar object vad jag vet.

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Har ej testat din kod men är det inte så att listbox.Items[i] ger tillbaks object? Så då måste man casta det till en sträng då FileInfo inte har en konstruktor som accepterar object vad jag vet.

Det är mycket möjligt. Som sagt så har jag inte testat att kompilera koden. Man får se den som en mall på hur man skulle kunna göra och inte som en komplett lösning.

Permalänk
Medlem

FileInfo[] filer = new FileInfo[listbox.Items.Count];
for(int i = 0; i < listbox.Items.Count; i++)
{
filer[i] = new FileInfo(listbox.Items[i].Text);
}

Kanske? Inte heller kompileringstestad, utan bara en liten förtydligen av vad de andra herrarna diskuterat

Visa signatur

| CPU: Intel Core i5 3570K | Mobo: MSI Z77A-GD65 ATX | Ram: Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE | GFX: Gigabyte HD7970 OC 3GB | SSD: Corsair Force 3 120GB | HDD: Diverse Mekaniska 4TB | Chassi: Corsair 800D | PSU: Corsair AX 850W 80+ Gold Modulär | CPU Cooler: Corsair H50 |
Citera mig så hittar jag tillbaka hit :)

Permalänk
Skrivet av ErDraug:

FileInfo[] filer = new FileInfo[listbox.Items.Count];
for(int i = 0; i < listbox.Items.Count; i++)
{
filer[i] = new FileInfo(listbox.Items[i].Text);
}

Kanske? Inte heller kompileringstestad, utan bara en liten förtydligen av vad de andra herrarna diskuterat

Som jag skrev ovan så returnerar den ju ett object. D.v.s. det har inte den propertyn.

Det enda som funkar är (förutsatt att man har lagt till strängar i listan):

FileInfo[] filer = new FileInfo[listbox.Items.Count]; for(int i = 0; i < listbox.Items.Count; i++) { filer[i] = new FileInfo((string)listbox.Items[i]); }

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Som jag skrev ovan så returnerar den ju ett object. D.v.s. det har inte den propertyn.

Det enda som funkar är (förutsatt att man har lagt till strängar i listan):

FileInfo[] filer = new FileInfo[listbox.Items.Count]; for(int i = 0; i < listbox.Items.Count; i++) { filer[i] = new FileInfo((string)listbox.Items[i]); }

men .text returnerar en text

Vilket blir exakt samma som det du skrev bara att den gör om itemet till en text som du skrev vilket borde ge samma resultat som mitt förslag

Visa signatur

| CPU: Intel Core i5 3570K | Mobo: MSI Z77A-GD65 ATX | Ram: Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE | GFX: Gigabyte HD7970 OC 3GB | SSD: Corsair Force 3 120GB | HDD: Diverse Mekaniska 4TB | Chassi: Corsair 800D | PSU: Corsair AX 850W 80+ Gold Modulär | CPU Cooler: Corsair H50 |
Citera mig så hittar jag tillbaka hit :)

Permalänk
Medlem
Skrivet av ErDraug:

men .text returnerar en text

Vilket blir exakt samma som det du skrev bara att den gör om itemet till en text som du skrev vilket borde ge samma resultat som mitt förslag

Förutsatt att man lägger till strängar i listan annars kommer den att göra en .ToString() på objektet i listan vilket blir helt fel.

Permalänk
Medlem
Skrivet av Garret:

Förutsatt att man lägger till strängar i listan annars kommer den att göra en .ToString() på objektet i listan vilket blir helt fel.

Naj .Text returnerar texten som står i fältet som är synligt för användaren, inte en ToString()

Edit: http://msdn.microsoft.com/en-us/library/system.windows.forms....

Visa signatur

| CPU: Intel Core i5 3570K | Mobo: MSI Z77A-GD65 ATX | Ram: Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE | GFX: Gigabyte HD7970 OC 3GB | SSD: Corsair Force 3 120GB | HDD: Diverse Mekaniska 4TB | Chassi: Corsair 800D | PSU: Corsair AX 850W 80+ Gold Modulär | CPU Cooler: Corsair H50 |
Citera mig så hittar jag tillbaka hit :)

Permalänk
Medlem

Jo men om du lägger in ett objekt i listan kommer den att sätta texten till objektets ToString() om man inte anger annat.

Permalänk
Skrivet av ErDraug:

Naj .Text returnerar texten som står i fältet som är synligt för användaren, inte en ToString()

Edit: http://msdn.microsoft.com/en-us/library/system.windows.forms....

Mjo, men det anropas på listboxen och kan alltså inte göra med indexern... För övrigt är det precis som garret skriver nedan ToString() som visas som standard. D.v.s. du kan slänga in en massa FileInfo i en listbox och då kommer den texten som visas att vara det som ToString() ger. Du kan senare hämta ut alla fileinfo som ligger där. Men då måste du castea om det först. .Text med indexern kommer inte ens kompilera, testa själv

Skrivet av Garret:

Jo men om du lägger in ett objekt i listan kommer den att sätta texten till objektets ToString() om man inte anger annat.

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

My bad then

Visa signatur

| CPU: Intel Core i5 3570K | Mobo: MSI Z77A-GD65 ATX | Ram: Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE | GFX: Gigabyte HD7970 OC 3GB | SSD: Corsair Force 3 120GB | HDD: Diverse Mekaniska 4TB | Chassi: Corsair 800D | PSU: Corsair AX 850W 80+ Gold Modulär | CPU Cooler: Corsair H50 |
Citera mig så hittar jag tillbaka hit :)