AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Datei kann nicht geschrieben werden - Warum und wie ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

Datei kann nicht geschrieben werden - Warum und wie ändern?

Offene Frage von "torud"
Ein Thema von torud · begonnen am 26. Okt 2006 · letzter Beitrag vom 30. Okt 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 21:02
lass den ganzen "schnotter" doch mal weg. erstell dir deine stringliste.
füge eine zeile hinzu und dann führe nur mal den folgenden code aus:
Delphi-Quellcode:
    sFileName := Pvw_Path + 'index.html';

    if fileexists(sFileName) then
      DeleteFile(sFileName);

    try
      HtmlList.SaveToFile(sFileName);
      HtmlList.Clear;
      HtmlList.Free;
    except
      on e: exception do
      begin
        ShowMessage('error = ' + e.Message);
      end;
    end;
   
    web.Navigate(sFileName);
Anmerkung:
sleep bringt dir nix, das lässt dein programm pausieren,
dann nimm lieber ein Application.ProcessMessages

gib mal feedback wie das nun ausgegangen ist.
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#12

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 21:19
keine versserung!

---------------------------
Txt 2 Html
---------------------------
error = Datei C:\Programme\Borland\Delphi6\Projects\TxtFilesToHt ml\preview\index.html kann nicht erstellt werden
---------------------------
OK
---------------------------
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 21:28
wie ist "Pvw_Path" definiert? Welchen Wert hat die Variable? Bist du dir ganz sicher das du auf jedem System in dem Ordner Schreibrechte hast? Schreibst du eventuell in den Programmordner?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#14

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 21:32
Hier mal der Code der FormCreate:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
    web.navigate('about:blank');
    App_Path:=ExtractFileDir(Application.ExeName);
    If not (AnsiLastChar(App_Path)='\') then App_Path := App_Path + '\';

    Txt_Path := App_Path + 'txt\';
    Css_Path := App_Path + 'css\';
    Pvw_Path := App_Path + 'preview\';
    ed_dir.Text:=Txt_Path;
    {usw.}
end;
Wie ich schon sagte, wenn es ein Problem mit den Benutzerrechten wäre, dürfte es doch nie klappen und nicht nur manchmal wie bei mir. Beim ersten mal klappt es komischerweise und wenn ich dem Tool genug Zeit gebe, bleibt auch alles schön. Habe ich aber nen nervösen Finger und drück den Button 2 oder 3 mal direkt hintereinander, dann kommt es zu dieser Fehlermeldung. Komisch, oder!?
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 21:44
sowas fange ich immer wie folgt ab:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if bAktionLaeuftNoch then
    Exit;

  bAktionLaeuftNoch := True;

  // dein code hier....

  bAktionLaeuftNoch := False;
end;
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#16

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 21:47
Ja ich hatte auch schon überlegt, ob ich das mit ner boolschen Variable abfange. Nur ist dabei das Problem, dass es im dümmsten Fall zu keinem Reset dieser kommt...

Aber ich werde es wohl so lösen...

Nachtrag: Es funzt trotzdem nicht! Ein einfacher Doppelklick reichte völlig aus.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#17

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 21:54
wie würde dieser dümmste fall aussehen?
per try finally - block sollten da keine probleme auftreten?!
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#18

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 26. Okt 2006, 22:31
Hier nochmal mein kompletter Code, mit dem es immer noch nicht geht. Was mache ich nur falsch?
Delphi-Quellcode:
procedure Tcomplete.btn_generateClick(Sender: TObject);
var
  HtmlList,ContentList,FileList:TStringlist;
  str_head,str_content,sFileName:string;
  i,k,z,j,int_Count,int_cols,int_rows,int_filecounter_th,int_filecounter_td:integer;
begin
  if CreateIsRunning then
    Exit;

  CreateIsRunning := True;
  int_Count:=0;
  int_cols:=0;
  int_rows:=0;
  int_filecounter_th:=0;
  int_filecounter_td:=0;

  int_cols:=ed_cols.Value;
  ContentList:=TStringlist.Create;
  HtmlList:=TStringlist.Create;
  FileList:=TStringlist.Create;

  HtmlList.Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">');
  HtmlList.Add('<html>');
  HtmlList.Add('<head>');
  HtmlList.Add('<link rel="stylesheet" href="../css/'+cmb_css_file.Text+'" type="text/css" />');

  HtmlList.Add('</head>');
  HtmlList.Add('<body>');

    for i:=0 to form1.list_files.Count-1 do
      if form1.list_files.Checked[i] then
        begin
          inc(int_Count);
          FileList.Add(form1.ed_dir.Text + form1.list_files.items[i])
        end;

    case rad_artikel_style.ItemIndex of
      0 : begin
            for i:=0 to form1.list_files.Count-1 do
              begin
                if form1.list_files.Checked[i] then
                  begin
                    ContentList.LoadFromFile(form1.ed_dir.Text + form1.list_files.Items.Strings[i]);
                    str_head:=ContentList.Strings[0];
                    ContentList.Delete(0);
                    str_content:=ContentList.Text;
                    form1.GenerateFile(form1.ed_dir.Text + form1.list_files.Items[i],false,i);
                    SetLength(str_content,strtoint(ed_sign_count.text));
                    //hier wird das layout zusammengebaut
                            HtmlList.Add('');
                            HtmlList.Add('<h3>'+str_head+'</h3>');
                            HtmlList.Add('');
                            if chk_br_linktext.Checked then
                              HtmlList.Add('

'+str_content+'
[url="artikel_id_
'+inttostr(i)+'.html"]'+ed_linktext.Text+'[/url]</p>')
                            else
                              HtmlList.Add('

'+str_content+' [url="artikel_id_'+inttostr(i)+'.html"]'+ed_linktext.Text+'[/url]</p>');
                            HtmlList.Add('');
                    end;
                  end;
              end;
        1 : begin
              HtmlList.Add('<table cellpadding="3">');
              int_rows:=((int_Count div int_cols) + (int_Count mod int_cols));
              //arbeitet alle zeilen ab
              for k:=0 to int_rows-1 do
                begin
                  //arbeitet die th-spalten ab
                  HtmlList.Add(' <tr valign="top">');
                  for z:= 1 to int_cols do
                    begin
                      ContentList.Clear;
                      if int_filecounter_th<int_Count then
                        begin
                          ContentList.LoadFromFile(FileList.Strings[int_filecounter_th]);
                          str_head:=ContentList.Strings[0];
                          HtmlList.Add(' <th>'+str_head+'</th>');
                        end
                      else
                          HtmlList.Add(' <th></th>');
                      inc(int_filecounter_th);
                    end;
                  HtmlList.Add(' </tr>');
                  //arbeitet die td-spalten ab
                  HtmlList.Add(' <tr valign="top">');
                  for z:= 1 to int_cols do
                    begin
                      ContentList.Clear;
                      if int_filecounter_td<int_Count then
                        begin
                          ContentList.LoadFromFile(FileList.Strings[int_filecounter_td]);
                          ContentList.Delete(0);
                          str_content:=ContentList.Text;
                          form1.GenerateFile(FileList.Strings[int_filecounter_td],false,int_filecounter_td);
                          SetLength(str_content,strtoint(ed_sign_count.text));
                          HtmlList.Add(' <td>' +str_content+' [url="artikel_id_'+inttostr(int_filecounter_td)+'.html"]'+ed_linktext.Text+'[/url]</td>');
                        end
                      else
                          HtmlList.Add(' <td></td>');
                      inc(int_filecounter_td);
                    end;
                  HtmlList.Add(' </tr>');
                end;
            end;
    end;
    HtmlList.Add('</body>');
    HtmlList.Add('</html>');

    sFileName := Pvw_Path + 'index.html';

    if fileexists(sFileName) then
      DeleteFile(sFileName);
      sleep(60);


    try
      HtmlList.SaveToFile(sFileName);
      HtmlList.Clear;
      HtmlList.Free;
    except
      on e: exception do
      begin
        ShowMessage('error = ' + e.Message);
      end;
    end;
    web.Navigate(sFileName);
    {try
      HtmlList.SaveToFile(sFileName);
      web.Navigate(sFileName);
    finally}

      FileList.Free;
      //HtmlList.Free;
      ContentList.Free;
      CreateIsRunning:=False;
// end;
end;
Danke
Tom
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#19

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 29. Okt 2006, 12:19
Hallo,

ich möchte nochmal kurz darauf aufmerksam machen, was das Problem bei mir ist:

Delphi-Quellcode:
    try
      HtmlList.SaveToFile(sFileName);
      HtmlList.Clear;
      HtmlList.Free;
    except
      on e: exception do
      begin
        ShowMessage('error = ' + e.Message);
      end;
    end;
Der Compiler geht direkt in die Zeile HtmlList.Clear;, was meistens der Fall ist, wenn er eine Zeile höher ein Problem hat. Die Meldung lautet wie immer. Die Datei kann nicht geschrieben werden. Gibt es noch irgendeine Möglichkeit das weg zu bekommen?
Danke
Tom
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: Datei kann nicht geschrieben werden - Warum und wie ände

  Alt 29. Okt 2006, 14:48
Hallo Tom,

im event handler für OnClick() von btn_generate würde ich nur Code zur Manipulation der Benutzerschnittstelle unterbringen, den Rest würde ich in mehrere Prozeduren auslagern. Einfach geht das indem du Actions verwendest:

Delphi-Quellcode:
procedure Tcomplete.cmd_GenerateExecute(Sender: TObject);
begin
  with Sender as TAction do
  begin
    Enabled := False;
    GeneratePage(FileName);
    Enabled := True;
  end;
end;
Du musst keine Datei vorher löschen, die du später mit SaveToFile() überschreibst. Erstellst du die Datei nur, damit sie im Browser angezeigt werden kann?

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz