读写文件时,文件被另外进程占用的问题

   使用FileInfo对象操作文件,常常在异常中看到“该文件被另外一个进程占用......”导致删除文件、或者文件的读写操作都中断。举个例子:

    我需要在某个文件夹下生成一个文件,然后通过FTP上传到服务器,而当我的FTP类访问这个文件的时候,就报上述异常了。代码如下:

   

  1. // 文件操作
  2. FileInfo fi = new FileInfo("e:/111.txt");
  3. if(!fi.Exists)
  4.     fi.Create();
  5. // 上传操作
  6. FTPClient fc = new FTPClient();
  7. fc.setRemotePort(21);
  8. ...
  9. ...
  10. fc.Put("e:/111.txt");    // 这里抛出异常了

    显然问题出在,上面的fi没有施放资源,但我找遍了API也找不到fi有类似的close()或者Unlock()等等的方法。后来我发现fi.Create()方法会返回一个FileStream对象,我尝试获取这个对象的引用,然后将它关闭,问题解决了。

  1. FileInfo fi = new FileInfo("e:/111.txt");
  2. FileStream fs;
  3. if(!fi.Exists)
  4.     fs = fi.Create();
  5. fs.Close();    // 施放资源

    注意:任何文件操作后,一定要做清理工作,最好是将文件操作的动作放在try块中,在finally中完成施放资源的操作。

 

你可能感兴趣的:(工作,api,服务器)