tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
190
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    KotNaschor Tutorials.de Gastzugang
    Hallo,

    ich habe mit
    Code :
    1
    
    Directory.CreateDirectory("Options");
    einen Ordner erzeugt, und habe mit
    Code :
    1
    2
    
    if (!File.Exists("Options/options.save"))
                    File.Create("Options/options.save");
    eine Datei in diesem ordner erstellt (falls noch keine drin war).

    und jetzt das problem!
    wenn ich danach auf diese datei zugreifen will, nähmlich so:
    Code :
    1
    
    Options_arr = File.ReadAllLines("Options/options.save");
    sagt er mir das, dass nicht geht weil ein anderer Prozess grad auf die Datei zugreift.
    Das passiert aber nur wenn er die Datei gerade auch erstellt hat, also muss es ja denke ich mal an File.Create liegen oda?
    Wie kann man das besser machen?
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Create öffnet einen Stream zur neuen Datei (macht Sinn, üblicherweise schreibt man danach was in die Datei). Den musst du schließen.

    Code :
    1
    2
    
    if (!File.Exists("Options/options.save"))
                    File.Create("Options/options.save")[b].Close()[/b];
     

  3. #3
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Hi.

    File.Create erstellt eine Datei, und liefert dir einen FileStream auf die Datei zurück. Sprich: dein Aufruf öffnet die Datei auch.

    Also entweder schließt du deine Datei gleich wieder...

    Code csharp:
    1
    2
    
    if (!File.Exists("Options/options.save"))
        File.Create("Options/options.save").Close();

    ..oder du baust dein Konstrukt so um, dass wenn die Datei nicht existiert, auch nichts gelesen wird.

    lg..
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  4. #4
    KotNaschor Tutorials.de Gastzugang
    ah vielen dank euch beiden!
     

  5. #5
    Avatar von NSR
    NSR NSR ist offline Mitglied Silber
    Registriert seit
    Nov 2008
    Beiträge
    94
    Hi, dass mit dem .Close() kannte ich bisher noch gar nicht.
    Ich habe mir da was zusammengeschrieben, und zwar damit:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    // In AllFilesServer sind strings mit Datei-Pfaden.
    foreach (string files in AllFilesServer)
    {
        if (!File.Exists(files))
        {    //start = DateTime.
            start = DateTime.Now;
            //Endlosschleife.
            while (true)
            {    //pruefzeit = DateTime.
                pruefzeit = DateTime.Now;
                try
                {    //Hier wird überprüft, ob der Zugriff auf die Datei schon 10 Sekunden oder länger dauert.
                    if ((pruefzeit.Ticks - start.Ticks) >= (10 * TimeSpan.TicksPerSecond))
                    {   //Wenn ja wird die Schleife abgebrochen. (LogEintrag ist eine Liste, die Logeinträge verwaltet. Hier wird z.B. die Gehlermeldung "Zeitüberschreitung beim Versuch die Datei zu kopieren.")
                        LogEintraege.Add(new LogEintrag(DateTime.Now, 0008));
                        break;
                    }
                    // Hier wird die Datei Kopiert. Wenn die Datei den Zugriff verweigert, wird das catch ausgelöst.
                    File.Copy(AllFilesLocal[counter].ToString(), files, true);
                    // Log wird geschrieben.
                    LogEintraege.Add(new LogEintrag(DateTime.Now, 0010, files));
                    //Die while-schleife wird beendet.
                    break;
                }
                //einmaliges dient dazu das log über das misslingen des Kopierens nur ein mal zu schreiben.
                catch { if (einmaligesLog == true) { LogEintraege.Add(new LogEintrag(DateTime.Now, 0007)); einmaligesLog = false; } }
            }
        }
    }

    Also der Code versucht eine Datei zu kopieren. Wenn diese sich nicht kopieren lässt, dann wird geschaut, ob seit beginn des kopier-veruchs 10 sec vergangen sind. Wenn ja, dann wird abgebrochen. ansonsten läuft die schleife als endlosschleife durch und versucht jedesmal die datei zu kopieren.
     

Ähnliche Themen

  1. Ordner mit Inhalt erzeugen
    Von just-click im Forum PHP
    Antworten: 4
    Letzter Beitrag: 28.08.08, 13:52
  2. Antworten: 0
    Letzter Beitrag: 21.11.07, 15:10
  3. Ordner auslesen und Selectfeld erzeugen
    Von Kahmoon im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 09.03.07, 10:25
  4. Exe-Datei von erstellten Programmen
    Von DeChecka im Forum Delphi, Kylix, Pascal
    Antworten: 1
    Letzter Beitrag: 06.09.05, 13:05
  5. Datei erstellten, geht aber nicht...
    Von SolarStern im Forum PHP
    Antworten: 4
    Letzter Beitrag: 02.08.03, 12:50