C# Får inte texten i en fil till listboxen (windows form)

Permalänk
Medlem

C# Får inte texten i en fil till listboxen (windows form)

Det problem jag har är att när jag startar programmet och ska koppla det till centraldatorn så vill jag se böckerna som finns i text.filen i min listbox men inget kommer fram.

Just nu så har jag en knapp(button) till dessa kodstycken och även en listbox såklart men jag kan inte få dit filens innehåll till den.

btnConnect.Enabled = false; btnSendObj.Enabled = true; btnSendAllObj.Enabled = true; btnExport.Enabled = true; //BtnExportToFile.Enabled = true;

Så jag undrar vart i min kod som jag skulle ha skrivit fel

Den här raderna är hur filen ser ut och det som jag ska få ut på listboxen.(visar inte allt innehåll men alla ser likadana ut)

Travronden Nr.8###Utg.Joakim Svensson###Tidskrift###false Skärkarlsliv###August Strindberg###Novellsamling###true Ett fat amontillado###Edgar Allan Poe###Novellsamling###true

P.S. Jag hade kollat igenom kraven på programmet och behövde inte skicka extra text till filen så den biten ska tas bort där av /* */ biten

public partial class Form1 : Form { TcpClient Klient = new TcpClient(); int port = 12345; List<Bok> bookList = new List<Bok>(); List<string> itemsaver = new List<string>(); String[] vektor; public Form1() { InitializeComponent(); Klient.NoDelay = true; string item = ""; List<string[]> strVektor = new List<string[]>(); if (File.Exists("texter.txt")) { StreamReader reader = new StreamReader("texter.txt", Encoding.Default, true); while ((item = reader.ReadLine()) != null) itemsaver.Add(item); foreach (string S in itemsaver) { vektor = S.Split(new string[] { "###" }, StringSplitOptions.None); strVektor.Add(vektor); Bok newBook = new Bok(); bookList.Add(newBook); newBook.Titel = vektor[0]; newBook.Författare = vektor[1]; newBook.Typ = vektor[2]; } reader.Dispose(); } } public async void StartReciver() { try { IPAddress adress = IPAddress.Parse("127.0.0.1"); await Klient.ConnectAsync(adress, port); btnConnect.Enabled = false; } catch (Exception error) { MessageBox.Show(error.Message, Text); return; } } public async void StartReader(string message) { byte[] outData = Encoding.Unicode.GetBytes(message); try { await Klient.GetStream().WriteAsync(outData, 0, outData.Length); } catch (Exception error) { MessageBox.Show(error.Message, this.Text); return; } } private void btnLoadList_click(object sender, EventArgs e) { listBox1.Items.AddRange(bookList.ToArray()); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { btnSendObj.Enabled = true; btnSendAllObj.Enabled = true; btnExport.Enabled = true; // BtnExportToFile.Enabled = true; } private void btnSendAllObj_Click(object sender, EventArgs e) { for (int i = 0; i < listBox1.Items.Count; i++) { StartReader(listBox1.Items[i].ToString()); Thread.Sleep(50); } } private void btnSendObj_Click(object sender, EventArgs e) { if (listBox1.SelectedItems.Count == 1) { StartReader(listBox1.Text.ToString()); bookList.RemoveAt(listBox1.SelectedIndex); listBox1.Items.RemoveAt(listBox1.SelectedIndex); } } private void btnConnect_Click(object sender, EventArgs e) { if (!Klient.Connected) StartReciver(); } private void btnClear_Click(object sender, EventArgs e) { if (listBox1.SelectedItems.Count == 1) listBox1.Items.RemoveAt(listBox1.SelectedIndex); else listBox1.Items.Clear(); } private void btnExport_Click(object sender, EventArgs e) { if (Klient.Connected) { byte[] meddelande = Encoding.Unicode.GetBytes(TbRichTextfile.Text); StartExport(meddelande); } } private async void StartExport(byte[] meddelande) { try { await Klient.GetStream().WriteAsync(meddelande, 0, meddelande.Length); } catch (Exception error) { MessageBox.Show(error.Message, this.Text); } } /*private void BtnExportToFile_Click(object sender, EventArgs e) { if (File.Exists("texter.txt")) { FileStream outStream = new FileStream("texter.txt", FileMode.Append, FileAccess.Write); StreamWriter writer = new StreamWriter(outStream); writer.Write(TbRichTextfile.Text); outStream.Dispose(); } }*/ public class Bok { public string Titel { get; set; } public string Författare { get; set; } public string Typ { get; set; } public override string ToString() { return Titel + " " + "(" + Typ + ")" + " av " + Författare; } } }

Permalänk
Medlem
Skrivet av Galaxfararen:

Det problem jag har är att när jag startar programmet och ska koppla det till centraldatorn så vill jag se böckerna som finns i text.filen i min listbox men inget kommer fram.

Just nu så har jag en knapp(button) till dessa kodstycken och även en listbox såklart men jag kan inte få dit filens innehåll till den.

btnConnect.Enabled = false; btnSendObj.Enabled = true; btnSendAllObj.Enabled = true; btnExport.Enabled = true; //BtnExportToFile.Enabled = true;

Så jag undrar vart i min kod som jag skulle ha skrivit fel

Den här raderna är hur filen ser ut och det som jag ska få ut på listboxen.(visar inte allt innehåll men alla ser likadana ut)

Travronden Nr.8###Utg.Joakim Svensson###Tidskrift###false Skärkarlsliv###August Strindberg###Novellsamling###true Ett fat amontillado###Edgar Allan Poe###Novellsamling###true

P.S. Jag hade kollat igenom kraven på programmet och behövde inte skicka extra text till filen så den biten ska tas bort där av /* */ biten

public partial class Form1 : Form { TcpClient Klient = new TcpClient(); int port = 12345; List<Bok> bookList = new List<Bok>(); List<string> itemsaver = new List<string>(); String[] vektor; public Form1() { InitializeComponent(); Klient.NoDelay = true; string item = ""; List<string[]> strVektor = new List<string[]>(); if (File.Exists("texter.txt")) { StreamReader reader = new StreamReader("texter.txt", Encoding.Default, true); while ((item = reader.ReadLine()) != null) itemsaver.Add(item); foreach (string S in itemsaver) { vektor = S.Split(new string[] { "###" }, StringSplitOptions.None); strVektor.Add(vektor); Bok newBook = new Bok(); bookList.Add(newBook); newBook.Titel = vektor[0]; newBook.Författare = vektor[1]; newBook.Typ = vektor[2]; } reader.Dispose(); } } public async void StartReciver() { try { IPAddress adress = IPAddress.Parse("127.0.0.1"); await Klient.ConnectAsync(adress, port); btnConnect.Enabled = false; } catch (Exception error) { MessageBox.Show(error.Message, Text); return; } } public async void StartReader(string message) { byte[] outData = Encoding.Unicode.GetBytes(message); try { await Klient.GetStream().WriteAsync(outData, 0, outData.Length); } catch (Exception error) { MessageBox.Show(error.Message, this.Text); return; } } private void btnLoadList_click(object sender, EventArgs e) { listBox1.Items.AddRange(bookList.ToArray()); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { btnSendObj.Enabled = true; btnSendAllObj.Enabled = true; btnExport.Enabled = true; // BtnExportToFile.Enabled = true; } private void btnSendAllObj_Click(object sender, EventArgs e) { for (int i = 0; i < listBox1.Items.Count; i++) { StartReader(listBox1.Items[i].ToString()); Thread.Sleep(50); } } private void btnSendObj_Click(object sender, EventArgs e) { if (listBox1.SelectedItems.Count == 1) { StartReader(listBox1.Text.ToString()); bookList.RemoveAt(listBox1.SelectedIndex); listBox1.Items.RemoveAt(listBox1.SelectedIndex); } } private void btnConnect_Click(object sender, EventArgs e) { if (!Klient.Connected) StartReciver(); } private void btnClear_Click(object sender, EventArgs e) { if (listBox1.SelectedItems.Count == 1) listBox1.Items.RemoveAt(listBox1.SelectedIndex); else listBox1.Items.Clear(); } private void btnExport_Click(object sender, EventArgs e) { if (Klient.Connected) { byte[] meddelande = Encoding.Unicode.GetBytes(TbRichTextfile.Text); StartExport(meddelande); } } private async void StartExport(byte[] meddelande) { try { await Klient.GetStream().WriteAsync(meddelande, 0, meddelande.Length); } catch (Exception error) { MessageBox.Show(error.Message, this.Text); } } /*private void BtnExportToFile_Click(object sender, EventArgs e) { if (File.Exists("texter.txt")) { FileStream outStream = new FileStream("texter.txt", FileMode.Append, FileAccess.Write); StreamWriter writer = new StreamWriter(outStream); writer.Write(TbRichTextfile.Text); outStream.Dispose(); } }*/ public class Bok { public string Titel { get; set; } public string Författare { get; set; } public string Typ { get; set; } public override string ToString() { return Titel + " " + "(" + Typ + ")" + " av " + Författare; } } }

Inte riktigt säker på vad som inte fungerar i din kod.

Är det
1) Att du inte kan läsa filen
2) Att du inte kan lägga till en bok i listboxen

Har du debuggat din kod för att se varför det inte fungerar?

Här är ett exempel på inläsning av fil, konvertering av innehållet till en lista av böcker och tillägg av en lista på böcker i en listbox.

namespace SampleWinformsApp064 { using System; using System.IO; using System.Collections.Generic; using System.Windows.Forms; public partial class Form1 : Form { const string contentFilePath = @c:\temp\books.txt; public Form1() { InitializeComponent(); // configure our logging Log.FilePath = @c:\temp\log.txt; } private void OnReadFileFromDisk(object sender, EventArgs e) { // read file from disk (no error handling) var value = ReadFileV1(contentFilePath); // read file from disk (with error handling) //var value = ReadFileV2(contentFilePath); // read file from disk (with error handling and using a stream) //var value = ReadFileV3(contentFilePath); // create a list of books based on a (multiline) string var books = Book.Make(value); // display the books in the list UpdateListBox(books); } private string ReadFileV1(string filename) { // no file exist? if (File.Exists(filename) == false) { Log.Write($"The file {filename} does not exists."); return null; } Log.Write($"Reading file from {filename}."); return File.ReadAllText(filename); } private string ReadFileV2(string filename) { try { // no file exist? if (File.Exists(filename) == false) { Log.Write($"The file {filename} does not exists."); return null; } Log.Write($"Reading file from {filename}."); return File.ReadAllText(filename); } catch (Exception ex) { Log.Write($"Failed to read file from {filename}.", ex); return null; } } private string ReadFileV3(string filename) { try { Log.Write($"Reading file from {filename}..."); using (var sr = new StreamReader(filename)) { return sr.ReadToEnd(); } } catch (Exception ex) { Log.Write($"Failed to read file from {filename}.", ex); return null; } } private void UpdateListBox(List<Book> books) { foreach (var book in books) { // note: the listbox displays whatever // object you add with a .ToString() // so you need to overload the .ToString method // on your book class to tell the listbox how // a book should be displayed Log.Write($"Adding book {book} to list box."); listBoxWithBookTitles.Items.Add(book); // alternative, just add the title instead // listBoxWithBookTitles.Items.Add(book.Title); } } } public static class Log { public static string FilePath { get; set; } public static void Write(string message, Exception ex = null) { try { if (ex == null) { File.AppendAllText( FilePath, message + Environment.NewLine); } else { File.AppendAllText( FilePath, $"{message}{Environment.NewLine}{ex}{Environment.NewLine}"); } } catch (Exception e) { Console.WriteLine(e); } } } public class Book { public string Title { get; set; } public string Author { get; set; } public string Type { get; set; } public override string ToString() { return Title; } public static List<Book> Make(string value) { var books = new List<Book>(); // split string per line var lines = value.Split(new[] {"\r\n", "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { // split line into items var items = line.Split(new [] { "###" }, StringSplitOptions.None); var book = new Book { Author = items[0], Title = items[1], Type = items[2] }; books.Add(book); } return books; } } }

Permalänk
Medlem
Citat:

zoomster2
Inte riktigt säker på vad som inte fungerar i din kod.

Är det
1) Att du inte kan läsa filen
2) Att du inte kan lägga till en bok i listboxen

Har du debuggat din kod för att se varför det inte fungerar?

Här är ett exempel på inläsning av fil, konvertering av innehållet till en lista av böcker och tillägg av en lista på böcker i en listbox.

namespace SampleWinformsApp064 { using System; using System.IO; using System.Collections.Generic; using System.Windows.Forms; public partial class Form1 : Form { const string contentFilePath = @c:\temp\books.txt; public Form1() { InitializeComponent(); // configure our logging Log.FilePath = @c:\temp\log.txt; } private void OnReadFileFromDisk(object sender, EventArgs e) { // read file from disk (no error handling) var value = ReadFileV1(contentFilePath); // read file from disk (with error handling) //var value = ReadFileV2(contentFilePath); // read file from disk (with error handling and using a stream) //var value = ReadFileV3(contentFilePath); // create a list of books based on a (multiline) string var books = Book.Make(value); // display the books in the list UpdateListBox(books); } private string ReadFileV1(string filename) { // no file exist? if (File.Exists(filename) == false) { Log.Write($"The file {filename} does not exists."); return null; } Log.Write($"Reading file from {filename}."); return File.ReadAllText(filename); } private string ReadFileV2(string filename) { try { // no file exist? if (File.Exists(filename) == false) { Log.Write($"The file {filename} does not exists."); return null; } Log.Write($"Reading file from {filename}."); return File.ReadAllText(filename); } catch (Exception ex) { Log.Write($"Failed to read file from {filename}.", ex); return null; } } private string ReadFileV3(string filename) { try { Log.Write($"Reading file from {filename}..."); using (var sr = new StreamReader(filename)) { return sr.ReadToEnd(); } } catch (Exception ex) { Log.Write($"Failed to read file from {filename}.", ex); return null; } } private void UpdateListBox(List<Book> books) { foreach (var book in books) { // note: the listbox displays whatever // object you add with a .ToString() // so you need to overload the .ToString method // on your book class to tell the listbox how // a book should be displayed Log.Write($"Adding book {book} to list box."); listBoxWithBookTitles.Items.Add(book); // alternative, just add the title instead // listBoxWithBookTitles.Items.Add(book.Title); } } } public static class Log { public static string FilePath { get; set; } public static void Write(string message, Exception ex = null) { try { if (ex == null) { File.AppendAllText( FilePath, message + Environment.NewLine); } else { File.AppendAllText( FilePath, $"{message}{Environment.NewLine}{ex}{Environment.NewLine}"); } } catch (Exception e) { Console.WriteLine(e); } } } public class Book { public string Title { get; set; } public string Author { get; set; } public string Type { get; set; } public override string ToString() { return Title; } public static List<Book> Make(string value) { var books = new List<Book>(); // split string per line var lines = value.Split(new[] {"\r\n", "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { // split line into items var items = line.Split(new [] { "###" }, StringSplitOptions.None); var book = new Book { Author = items[0], Title = items[1], Type = items[2] }; books.Add(book); } return books; } } }

Det är att jag inte ser om böckerna har kommit in.
Alltså nr 1 är väll mest troligast eller båda.

När jag liksom startar programmet så vill jag kunna se alla böckerna i listboxen men den är tom när jag startar programmet och om jag trycker på de knapparna som jag har redan lagt dit så kommer dom inte upp i listboxen.

Permalänk
Medlem
Skrivet av Galaxfararen:

Det är att jag inte ser om böckerna har kommit in.
Alltså nr 1 är väll mest troligast eller båda.

När jag liksom startar programmet så vill jag kunna se alla böckerna i listboxen men den är tom när jag startar programmet och om jag trycker på de knapparna som jag har redan lagt dit så kommer dom inte upp i listboxen.

Som sagt, använd debuggern för att säkerställa att din kod körs alls. Du kommer att behöva den mycket i framtiden, så lika bra att du bekantar dig med den redan nu.

En annan sak är att du har väldigt många olika listor som du inte använder till något annat än att bara stoppa in olika objekt i. Gå igenom din kod och fundera över om du verkligen behöver alla dessa olika listor. En lista du aldrig läser upp någonting ifrån är med största sannolikhet en lista du inte behöver.

Permalänk
Medlem

Ett till exempel på hur en enkel TcpListener + TcpClient skulle kunna vara implementerad.

Som vi skrivit tidigare, använd debuggern.

I Visual Studio.
Högerklicka på kodraden du vill stanna exekveringen på och välj Breakpoint -> Insert Breakpoint.
Eller så kan du klicka direkt längst ut till vänster på den rad du vill lägga till en breakpoint.

Efter att du har en röd markering på vänster sida kan du trycka F5 för att starta applikationen med debuggern.
När exekveringen av programmet når din brytpunkt så pausar applikationen och om du switchar tillbaka till VS fönstret så kan du nu se alla värden på dina variabler. Det är bara att hoovra över den variabel du vill se.
Tryck F10 för att köra nästa kodrad. Tryck F11 för att 'följa med' i flödet. Om din kod anropar en annan metod, så hoppar den in i den metoden.

using System.Net; using System.Text; using System.Threading.Tasks; namespace SampleWinformsApp064 { using System; using System.IO; using System.Net.Sockets; using System.Collections.Generic; using System.Windows.Forms; public partial class Form1 : Form { private const string ContentFilePath = @c:\temp\books.txt; public Form1() { InitializeComponent(); // configure our logging Log.FilePath = @c:\temp\log.txt; } private void OnReadFileFromDisk(object sender, EventArgs e) { // read file from disk (with error handling) var value = ReadFile(ContentFilePath); // create a list of books based on a (multiline) string var books = Book.Make(value); // display the books in the list UpdateListBox(books); } private string ReadFile(string filename) { try { // no file exist? if (File.Exists(filename) == false) { Log.Write($"The file {filename} does not exists."); return null; } Log.Write($"Reading file from {filename}."); return File.ReadAllText(filename); } catch (Exception ex) { Log.Write($"Failed to read file from {filename}.", ex); return null; } } private void UpdateListBox(IEnumerable<Book> books) { foreach (var book in books) { // note: the listbox displays whatever // object you add with a .ToString() // so you need to overload the .ToString method // on your book class to tell the listbox how // a book should be displayed Log.Write($"Adding book {book} to list box."); listBoxWithBookTitles.Items.Add(book); // alternative, just add the title instead // listBoxWithBookTitles.Items.Add(book.Title); } } private async void OnStartReceiving(object sender, EventArgs e) { var ip = IPAddress.Parse("127.0.0.1"); var server = new TcpListener(ip, 34511); server.Start(); // change while (true) to a property that enables/disables listening while (true) { // wait for client connections var client = await server.AcceptTcpClientAsync(); // a client was connected.. await using var stream = client.GetStream(); using var reader = new StreamReader(stream); var message = await reader.ReadToEndAsync(); try { var books = Book.Make(message); foreach (var book in books) { // this is required because we are running // on a different thread than the ui Invoke((MethodInvoker)(() => listBoxWithReceivedBooks.Items.Add(book))); } } catch (Exception ex) { Log.Write("Failed to parse the received data.", ex); } } } private async void OnSendLoadedBooks(object sender, EventArgs e) { var fromFile = ReadFile(ContentFilePath); var buffer = Encoding.UTF8.GetBytes(fromFile); try { var client = new TcpClient("localhost", 34511); await using var stream = client.GetStream(); stream.Write(buffer, 0, buffer.Length); stream.Flush(); } catch (Exception ex) { Log.Write("Failed to write to network.", ex); } } } public static class Log { public static string FilePath { get; set; } public static void Write(string message, Exception ex = null) { try { if (ex == null) { File.AppendAllText( FilePath, message + Environment.NewLine); } else { File.AppendAllText( FilePath, $"{message}{Environment.NewLine}{ex}{Environment.NewLine}"); } } catch (Exception e) { Console.WriteLine(e); } } } public class Book { public string Title { get; set; } public string Author { get; set; } public string Type { get; set; } public override string ToString() { return Title; } public static List<Book> Make(string value) { var books = new List<Book>(); // split string per line var lines = value.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { // split line into items var items = line.Split(new[] { "###" }, StringSplitOptions.None); var book = new Book { Author = items[0], Title = items[1], Type = items[2] }; books.Add(book); } return books; } } }

Permalänk
Medlem
Citat:

noMad17
Som sagt, använd debuggern för att säkerställa att din kod körs alls. Du kommer att behöva den mycket i framtiden, så lika bra att du bekantar dig med den redan nu.

En annan sak är att du har väldigt många olika listor som du inte använder till något annat än att bara stoppa in olika objekt i. Gå igenom din kod och fundera över om du verkligen behöver alla dessa olika listor. En lista du aldrig läser upp någonting ifrån är med största sannolikhet en lista du inte behöver.

Citat:

zoomster2
Ett till exempel på hur en enkel TcpListener + TcpClient skulle kunna vara implementerad.

Som vi skrivit tidigare, använd debuggern.

I Visual Studio.
Högerklicka på kodraden du vill stanna exekveringen på och välj Breakpoint -> Insert Breakpoint.
Eller så kan du klicka direkt längst ut till vänster på den rad du vill lägga till en breakpoint.

Efter att du har en röd markering på vänster sida kan du trycka F5 för att starta applikationen med debuggern.
När exekveringen av programmet når din brytpunkt så pausar applikationen och om du switchar tillbaka till VS fönstret så kan du nu se alla värden på dina variabler. Det är bara att hoovra över den variabel du vill se.
Tryck F10 för att köra nästa kodrad. Tryck F11 för att 'följa med' i flödet. Om din kod anropar en annan metod, så hoppar den in i den metoden.

using System.Net; using System.Text; using System.Threading.Tasks; namespace SampleWinformsApp064 { using System; using System.IO; using System.Net.Sockets; using System.Collections.Generic; using System.Windows.Forms; public partial class Form1 : Form { private const string ContentFilePath = @c:\temp\books.txt; public Form1() { InitializeComponent(); // configure our logging Log.FilePath = @c:\temp\log.txt; } private void OnReadFileFromDisk(object sender, EventArgs e) { // read file from disk (with error handling) var value = ReadFile(ContentFilePath); // create a list of books based on a (multiline) string var books = Book.Make(value); // display the books in the list UpdateListBox(books); } private string ReadFile(string filename) { try { // no file exist? if (File.Exists(filename) == false) { Log.Write($"The file {filename} does not exists."); return null; } Log.Write($"Reading file from {filename}."); return File.ReadAllText(filename); } catch (Exception ex) { Log.Write($"Failed to read file from {filename}.", ex); return null; } } private void UpdateListBox(IEnumerable<Book> books) { foreach (var book in books) { // note: the listbox displays whatever // object you add with a .ToString() // so you need to overload the .ToString method // on your book class to tell the listbox how // a book should be displayed Log.Write($"Adding book {book} to list box."); listBoxWithBookTitles.Items.Add(book); // alternative, just add the title instead // listBoxWithBookTitles.Items.Add(book.Title); } } private async void OnStartReceiving(object sender, EventArgs e) { var ip = IPAddress.Parse("127.0.0.1"); var server = new TcpListener(ip, 34511); server.Start(); // change while (true) to a property that enables/disables listening while (true) { // wait for client connections var client = await server.AcceptTcpClientAsync(); // a client was connected.. await using var stream = client.GetStream(); using var reader = new StreamReader(stream); var message = await reader.ReadToEndAsync(); try { var books = Book.Make(message); foreach (var book in books) { // this is required because we are running // on a different thread than the ui Invoke((MethodInvoker)(() => listBoxWithReceivedBooks.Items.Add(book))); } } catch (Exception ex) { Log.Write("Failed to parse the received data.", ex); } } } private async void OnSendLoadedBooks(object sender, EventArgs e) { var fromFile = ReadFile(ContentFilePath); var buffer = Encoding.UTF8.GetBytes(fromFile); try { var client = new TcpClient("localhost", 34511); await using var stream = client.GetStream(); stream.Write(buffer, 0, buffer.Length); stream.Flush(); } catch (Exception ex) { Log.Write("Failed to write to network.", ex); } } } public static class Log { public static string FilePath { get; set; } public static void Write(string message, Exception ex = null) { try { if (ex == null) { File.AppendAllText( FilePath, message + Environment.NewLine); } else { File.AppendAllText( FilePath, $"{message}{Environment.NewLine}{ex}{Environment.NewLine}"); } } catch (Exception e) { Console.WriteLine(e); } } } public class Book { public string Title { get; set; } public string Author { get; set; } public string Type { get; set; } public override string ToString() { return Title; } public static List<Book> Make(string value) { var books = new List<Book>(); // split string per line var lines = value.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { // split line into items var items = line.Split(new[] { "###" }, StringSplitOptions.None); var book = new Book { Author = items[0], Title = items[1], Type = items[2] }; books.Add(book); } return books; } } }

Jag har testat era båda alternativ och enligt debugern så kommer står det vid kodstycket

if (File.Exists("Texter.txt"))

count = 0 så jag har väll inte lyckats med att få över böckerna till programmet vad jag förstår.

Med kodstycket som ( zoomster2 ) så funkar den inte när jag lägger in det (inte copy/paste).

De krav som uppgiften vill ha från mig

Citat:

Ditt program ska vara byggt i ett grafiskt Windows Forms-gränssnitt.
Ditt program ska kunna kopplas till Centraldator genom asynkron TCP-koppling. Det här ska visas med ett grafiskt element (exempelvis en knapp som blir grön)
Ditt program ska kunna ladda in böcker från en extern textfil och spara det i ett grafiskt listBox-element.
Användaren ska kunna markera böcker ur listan, som de sedan kan skicka till Centraldatorn.
Centraldatorn tar emot enstaka strängar, så du rekommenderas att skicka böckernas ToString-override som vi har gått igenom i tidigare uppgifter.

Permalänk
Medlem
Skrivet av Galaxfararen:

Jag har testat era båda alternativ och enligt debugern så kommer står det vid kodstycket

if (File.Exists("Texter.txt"))

count = 0 så jag har väll inte lyckats med att få över böckerna till programmet vad jag förstår.

Med kodstycket som ( zoomster2 ) så funkar den inte när jag lägger in det (inte copy/paste).

De krav som uppgiften vill ha från mig

Ang

if (File.Exists("Texter.txt"))

så är det troligtvis att att textfilen ligger på fel ställe. Eftersom du inte anger en full sökväg, så letar den i samma foldern som .exe filen ligger i. Alltså inte i projekt/solution mappen utan i bin/debug foldern under projekt foldern.

Ang. copy & paste från exemplet.
Eftersom en winforms applikation består av flera filer och alla kontroller objekt hamnar i den 'andra' filen så är det lite svårt att bara copy & paste.
Exemplet är tänkt som underlag att läsa, inte kopiera rakt av.

Edit. Såg också att att forumet inte tycker om @ och ".
Det ska naturligtvis vara tex.

const string contentFilePath = @ "c:\temp\books.txt";

utan space mellan @ och ".

Permalänk
Medlem
Skrivet av zoomster2:

Edit. Såg också att att forumet inte tycker om @ och ".
Det ska naturligtvis vara tex.

const string contentFilePath = @ "c:\temp\books.txt";

utan space mellan @ och ".

Använd [noparse]@"c:\temp\books.txt";[/noparse] för hindra en bit av inlägget från att bli parsat.

Permalänk
Medlem
Skrivet av zoomster2:

Ang

if (File.Exists("Texter.txt"))

så är det troligtvis att att textfilen ligger på fel ställe. Eftersom du inte anger en full sökväg, så letar den i samma foldern som .exe filen ligger i. Alltså inte i projekt/solution mappen utan i bin/debug foldern under projekt foldern.

Anger du ingen sökväg letar programmet efter filen i arbetskatalogen vilket inte alltid är den katalog där EXE-filen finns. Om du ställer in PATH-variabeln för att enkelt starta EXE-filen från kommandoraden kommer du märka att arbetskatalogen oftast inte är den katalog som EXE-filen ligger i.