请帮忙看看,我在一个工程中用
var
      F:   TextFile;
      a:   String;
  begin
      a   :=   '写入文件';
      AssignFile(F,'d:\123.txt');
      Rewrite(F);
      Writeln(F,a);
      CloseFile(F);
  
  end;
提示:“i/o错误 183 ”,代码停在 Rewrite(F);这一行,用reset(f);也一样出错,然后我新建一个工程,相同的代码相同的电脑和系统却可以正常执行,为什么?
谢谢了

解决方案 »

  1.   

    我教你一个简单的办法,如果你写文本文件,在窗体里边运用的话,你可以用tstringlist,因为他有个savetofile的方法,可以直接保存成文本文件。
    例如你用一个memo1,
    把需要的信息写倒memo1中(memo1.lines.add('写入文件'));
    然后memo1.lines.savetofile('c:\aa.txt'),就可以了,如果你不希望客户看到memo,visable设置为false。
      

  2.   

    你的代码没问题,应该和你的c:\123.txt有关系,是否该文件已在内存里或已经处于打开状态,被别的程序站用。
      

  3.   

    最简单的还是用控件的savetofile,要写入的内容少时用memo,内容大时用richedit。
      

  4.   

    心得01(转载) 
    关于此主题仅有 1 个帖子 - 树式浏览  
     发件人:  octopus - 查看个人资料 
    日期:  2004年4月16日(星期五) 上午12时56分  
    电子邮件:   octopusQ@feeling-NOsmthSPAM-org (octopus) 
    论坛:   cn.bbs.comp.lang.delphi 
    尚未评分评级:    
    显示选项  
    回复 | 答复作者 | 转发 | 打印 | 显示个别帖子 | 显示原始邮件 | 报告滥用行为 | 查找此作者的帖子  
    心得01 
    [ 心得00 ] [ 心得01 ] [ 心得02 ] [ 心得03 ] [ 心得04 ] [ 心得05 ] [ 心得06 ] [ 疑难问题 ]   98-6-22 11:08 
    翻出数月前下载的一个Delphi增强元件库rxlib.zip,照着其中的说明文件 
    安装到我的Delphi3下,忽然有种感觉:要是以开发Delphi元件为荣的人见到 
    rxlib.zip一定会有"既生瑜,何生亮"的感觉.这个元件库做得实在是太好了. 
    98-6-19 9:26 
    奇怪的I/O error -- 我在开发过程中发现下面这两条语句 
         assignfile(fDesc,CDDatadir+describefile); 
         reset(fDesc);   
    每当我第一次运行到这里时,总会出现 I/O Error 183 的错误. 
    最后我想这也有可能是没有清除 ioresult 的原因.在两句之间加入 
         if ioresult<>0 
         then;           
    oooook! 可以了. 
    98-6-18 11:40 
    值得注意的I/O error 
      AssignFile(F, fname); 
      Rewrite(F); 
    当文件 F 经 Reset(F)打开的情况下, Rewrite(F)会引发一个异常: I/O error 32 
    反之,经 Rewrite(F)打开, Reset(F)也会引发同一个异常. 
    Reset(F)两次,closefile(F),再Rewrite(F),或反之,也会引发同样异常. 
    98-6-17 1:40 
    关于FileListBox的一个无法避免的陷阱 
    Delphi叫我既爱且恨。我做了个程序,是扫描光盘目录的。用到了FileListBox元件。 
    每当我转到光盘上的某个特定文件夹后,换上另一张光盘,再次扫描,FileListBox就 
    会报错:File not found. 为了这个错误,我调试了整整两天!开始以为是自己程序 
    中有逻辑错误,可无论怎么改,每次换盘后,一更新FileListBox.directory,出错信 
    息依旧。最后我想了个最直接的方法:只放一个FileListBox和一个Edit元件,同样的 
    换盘顺序,哈!同样的错误信息再次出现。看看Delphi的源程序吧: 
    -- I:\Program Files\Borland\Delphi 3\Source\VCL\filectrl.pas中: 
    procedure TFileListBox.SetDirectory(const NewDirectory: string); 
    begin 
      if AnsiCompareFileName(NewDirectory, FDirectory) <> 0 then 
      begin 
           { go to old directory first, in case not complete pathname 
             and curdir changed - probably not necessary } 
        ChDir(FDirectory);       // 哼!就是这儿,害得我好惨。 
        ChDir(NewDirectory);     { exception raised if invalid dir } 
        GetDir(0, FDirectory);   { store correct directory name } 
        ReadFileNames; 
      end; 
    end; 
    唉,连Delphi先生都说:“可能不需要”(probably not necessary)。 
    而实际上,我在修改了这里之后,仍然不对. 我又发现,在filectrl.pas中,有好几处这样 
    的地方需要修改. 最后,我只得放弃用FileListBox,改用ListBox了. 唉! 
    98-6-17 1:12 
    ExtractAssociatedIcon()和ExtractIcon() 可从指定文件中分离出其icon 
    或其相关程序的icon. 
    // Delphi 3 
    // uses ..., ShellAPI; 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      FileName: AnsiString; 
    begin 
      FileName := 'd:\temp\Project1.exe'; 
      Image1.Picture.Icon.Handle := 
      ExtractIcon(Hinstance, pchar(FileName), 0); 
    end; 
    98-6-17 1:01 
    Lloyd's help file (ldelphi.zip)  钱达智兄推荐的技术文件。 
    TrayIcon.zip  同样是达智兄推荐的一个协助将您的程式放到开始功能列的右下角的元件。 
    98-6-13 2:36 
    string和pchar的相互转换: 
    string --> pchar:  pchar(str:string); 
    pchar  --> string: strpas(p:pchar); 
    98-6-12 18:02 
    关于IOResult 
    唉!虽然我喜欢Delphi,可也不希望有一个个的bug出现! 
    procedure TForm1.FormCreate(Sender: TObject); 
    begin 
    {$i-} 
      chdir('dsafadsf'); 
      chdir('.'); 
    {$i+} 
      showmessage(inttohex(ioresult,4)); 
      showmessage(inttohex(ioresult,4)); 
    end; 
    请看这个过程:自己作一下,你会发现,两个Showmessage的结果竟然不一样! 
    --= 98-6-18 11:03 =-- 
    Sorry, 我错怪Delphi了. 事实上, 在Delphi中, 当设为{$i-}之后, 如果 
    发生了I/O错误, 一定要调用IOResult来清除这一错误代码.(见联机帮助) 
    (爱之深,恨之切嘛. xixi) 
    98-6-10 14:53 
    给数组直接赋值的方法: 
      ArrayTest: array[1..2, 1..2] of integer = 
              ((1, 2), (3, 4)); 
    变量命名法:(这种前置小写变量类型的做法挺好) 
    iRecord: integer; 
    recRead: TTest; 
    -----------------《DELPHI新闻组学习笔记》--------------- 
    这类字串函数(像是PadR,PadL)自己练习写写看其实挺有趣的;如果急着要用,类似这样子的字串处 
    理函数在网络上不少,如Delphi 2.0 深度历险就有个叫做 XProc 的档案,里头就有很多。 
    幸好我这里有 cj.sor..., 以后有这种问题时,请告诉大家 cj.sor . boshiamy.sor. phone.sor 可以 
    从哪里取得,这样,有心帮忙的朋友好帮忙测试。 
    -----------------《DELPHI新闻组学习笔记》--------------- 
    (cj.sor是什么?) 
    98-6-9 22:55 
    作了一个鼠标拖放的编程。发现有一个地方有点容易弄错,那就是在 
    OnDragOver事件中,一定要显式地指定Accept的值。 
    procedure TMainForm.DescListBoxDragOver(Sender, Source: TObject; X, 
      Y: Integer; State: TDragState; var Accept: Boolean); 
    begin 
      if (Source=FileListBox) and (fileexists(FileListBox.FileName)) 
      then accept:=true; 
    end; 
    这是错的。只有在then子句后加入 
      else accept:=false; 
    才能得到正确的结果。当然,还有一个更简单的写法,只要一行: 
      accept:=(Source=FileListBox) and (fileexists(FileListBox.FileName));  
      

  5.   

    //这里的解释你自己看一下
    http://groups.google.com/group/cn.bbs.comp.lang.delphi/browse_thread/thread/f31eec4363b625b2/75477d7c020e7e95%2375477d7c020e7e95
      

  6.   

    加了一个   if ioresult<>0 
    就好了,十分感谢大家