System.IO.IOException, finde meinen Fehler nicht

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    System.IO.IOException, finde meinen Fehler nicht

    Ich bin akutell dabei eine kleine Konsolenanwendung zu schreiben. Ich bekomme dann aber bei der Ausführung folgende Exception:

    Quellcode

    1. "Ein Ausnahmefehler des Typs "System.IO.IOException" ist in mscorlib.dll aufgetreten.
    2. Zusätzliche Informationen: Der Prozess kann nicht auf die Datei "C:\Users\csc\Documents\config.txt" zugreifen, da sie von einem anderen Prozess verwendet wird."

    Diese tritt im folgenden Code in Zeile 64 auf, wenn ich das File erstelle und dannach Versuche es zu öffnen.

    C#-Quellcode

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.Diagnostics;
    7. using System.IO;
    8. namespace OnStart
    9. {
    10. class Program
    11. {
    12. static String[] meineWerte;
    13. static void Main(string[] args)
    14. {
    15. FileInfo _fi;
    16. StreamReader _sr;
    17. String _User;
    18. String _pathToConfig;
    19. String _ConsoleRead;
    20. Boolean firstStartFile;
    21. _User = Environment.UserName;
    22. _pathToConfig = @"C:\Users\" + _User + @"\Documents\config.txt";
    23. _fi = new FileInfo(_pathToConfig);
    24. if(!_fi.Exists)
    25. {
    26. Console.WriteLine("ConfigFile wird erstell in: {0}", _pathToConfig);
    27. Console.WriteLine("");
    28. Console.WriteLine("Willst du die Werte nun eintragen?");
    29. Console.WriteLine("Y/N");
    30. _ConsoleRead = Console.ReadLine();
    31. firstStartFile = true;
    32. }
    33. else
    34. {
    35. firstStartFile = false;
    36. _ConsoleRead = "";
    37. }
    38. if (firstStartFile)writeIn(_ConsoleRead, _pathToConfig);
    39. }
    40. public static void StartUp(String Programm)
    41. {
    42. Process.Start(Programm);
    43. }
    44. public static void writeIn(String wahl,String configPath)
    45. {
    46. Boolean writeBool;
    47. switch (wahl)
    48. {
    49. case "Y":
    50. writeBool = true;
    51. break;
    52. default:
    53. writeBool = false;
    54. break;
    55. }
    56. if(writeBool)
    57. {
    58. StreamWriter _sw;
    59. Boolean _onWrite;
    60. String _onRead;
    61. _onWrite = true;
    62. Console.Write("Beliebige Taste drücken ...");
    63. Console.ReadKey();
    64. File.OpenWrite(configPath);
    65. Console.Clear();
    66. Console.WriteLine("Beginne nun mit dem Beschreiben der TXT Datei...");
    67. Console.WriteLine("Den Schreibvorgang kann man mit einem bestätigten Y beenden");
    68. List<string> _zwischenList;
    69. _zwischenList = new List<string>();
    70. while (_onWrite)
    71. {
    72. _onRead = Console.ReadLine();
    73. if (_onRead != "Y")
    74. {
    75. _zwischenList.Add(_onRead);
    76. Console.WriteLine("Der Wert {0} wird der Config-Datei {1} hinzugefügt.", _onRead, configPath);
    77. }
    78. else
    79. {
    80. Console.WriteLine("Der Schreibvorgang wurde Beendet");
    81. _onWrite = false;
    82. File.AppendAllLines(configPath, arrayAdder(_zwischenList));
    83. }
    84. }
    85. }
    86. }
    87. public static string[] arrayAdder(List<string> input)
    88. {
    89. meineWerte = new string[input.Count];
    90. for (int i = 0; i < input.Count-1; i++)
    91. {
    92. meineWerte[i] = (string)input[i];
    93. }
    94. return meineWerte;
    95. }
    96. }
    97. }


    Ich hoffe ihr könnt mir ein paar Tipps geben diese Exception zu fixxen.

    LG
    LC

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Lord C“ ()

    Lord C schrieb:

    C#-Quellcode

    1. _fi.Create();
    Streich mal diese Zeile ersatzlos.
    Was tut diese Zeile Deiner Meinung nach:

    Lord C schrieb:

    File.OpenWrite(configPath);
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Was tut diese Zeile Deiner Meinung nach:

    Lord C schrieb:
    File.OpenWrite(configPath);


    Das das Dokument mit schreibrechten Geöffnet wird?

    und warum soll ich das _fi.Create() streichen, bzw soll dann das File erstellt werden per Code :)

    Edit: Ich sehe es nun, ich kann File.OpenWrite() auch zum erstell nutzen, er öffnet es dann direkt oder?

    Lord C schrieb:

    Das das Dokument mit schreibrechten Geöffnet wird?
    und in der nächsten Programmzeile beendest Du die Applikation?
    Hast Du die Zeile inzwischen gelöscht?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    _fi.Create() ist gelöscht, ich abreite es noch oben raus.

    und in der nächsten Zeile will ich eigtlich die Konsole closen, aber da bin ich noch drann dass ich mit dem eigentlich teil weiter mache wo ich noch am Entwickeln bin.
    Was willst Du wie in diese Datei schreiben?
    • Vollständigen Inhalt und immer überschreiben?
    • Neuen Inhalt anhängen?
    • ???
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Lord C schrieb:

    angehängt
    Dann lass den ganzen Quatsch und verwende

    VB.NET-Quellcode

    1. IO.File.AppendAllLines("PFAD", content_as_StringArray)
    2. ' oder
    3. IO.File.AppendAllText("PFAD", content_as_String)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Lord C schrieb:

    oder
    Probiere es aus, das geht schneller, als hier einen Post zu schreiben und der Lerneffekt für Dich ist größer. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich bekomme den Fehler immer noch, sobald ich ins

    C#-Quellcode

    1. File.AppendAllLines(configPath,meineWerte);


    komme. Da ich ja

    C#-Quellcode

    1. File.OpenWrite(configPath);


    hier immernoch das File erstelle.

    Edit: Quellcode im Startpost angepasst.

    RodFromGermany schrieb:

    Dann lass den ganzen Quatsch
    meint, solch Code

    Lord C schrieb:

    C#-Quellcode

    1. File.OpenWrite(configPath);
    ersatzlos zu streichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Und wie bzw wo wird das file dann erstellt? (Ich war gestern nicht mehr am PC dh schreib ich erst jetzt)

    edit: Ok sehe es dank dir :) für die hilfe.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lord C“ ()

    Hi
    was RodFromGermany nicht erklärt hat: File.OpenWrite gibt eine Referenz auf einen Stream zurück. Stream ist eine Klasse, die dazu dient, Inhalte auf möglichst allgemeingültige Art und Weise zu lesen und zu schreiben. Zusätzlich dazu gibt's dann noch Klassen, die genauer auf bestimmte Zwecke zugeschnitten sind, wie bspw. StreamWriter und StreamReader oder BinaryWriter und BinaryReader:

    C#-Quellcode

    1. using(StreamWriter sw = new StreamWriter(File.OpenWrite(...))
    2. {
    3. sw.WriteLine("bla");
    4. }


    Das empfinde ich als intuitiver, als AppendAllLines, zumal das jedes mal die Datei neu öffnet, reinschreibt und wieder schließt, d.h. die Datei könnte zwischendurch auch gelöscht, verschoben oder anders verändert werden.

    Viele Grüße
    ~blaze~