![]() |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
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:
Anmerkung:
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); sleep bringt dir nix, das lässt dein programm pausieren, dann nimm lieber ein Application.ProcessMessages gib mal feedback wie das nun ausgegangen ist. |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
keine versserung!
--------------------------- Txt 2 Html --------------------------- error = Datei C:\Programme\Borland\Delphi6\Projects\TxtFilesToHt ml\preview\index.html kann nicht erstellt werden --------------------------- OK --------------------------- |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
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?
|
Re: Datei kann nicht geschrieben werden - Warum und wie ände
Hier mal der Code der FormCreate:
Delphi-Quellcode:
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!?
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; |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
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; |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
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. |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
wie würde dieser dümmste fall aussehen?
per try finally - block sollten da keine probleme auftreten?! |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
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; |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
Hallo,
ich möchte nochmal kurz darauf aufmerksam machen, was das Problem bei mir ist:
Delphi-Quellcode:
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?
try
HtmlList.SaveToFile(sFileName); HtmlList.Clear; HtmlList.Free; except on e: exception do begin ShowMessage('error = ' + e.Message); end; end; |
Re: Datei kann nicht geschrieben werden - Warum und wie ände
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:
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?
procedure Tcomplete.cmd_GenerateExecute(Sender: TObject);
begin with Sender as TAction do begin Enabled := False; GeneratePage(FileName); Enabled := True; end; end; Freundliche Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz