使用FileInfo对象操作文件,常常在异常中看到“该文件被另外一个进程占用......”导致删除文件、或者文件的读写操作都中断。举个例子:
我需要在某个文件夹下生成一个文件,然后通过FTP上传到服务器,而当我的FTP类访问这个文件的时候,就报上述异常了。代码如下:
- // 文件操作
- FileInfo fi = new FileInfo("e:/111.txt");
- if(!fi.Exists)
- fi.Create();
- // 上传操作
- FTPClient fc = new FTPClient();
- fc.setRemotePort(21);
- ...
- ...
- fc.Put("e:/111.txt"); // 这里抛出异常了
显然问题出在,上面的fi没有施放资源,但我找遍了API也找不到fi有类似的close()或者Unlock()等等的方法。后来我发现fi.Create()方法会返回一个FileStream对象,我尝试获取这个对象的引用,然后将它关闭,问题解决了。
- FileInfo fi = new FileInfo("e:/111.txt");
- FileStream fs;
- if(!fi.Exists)
- fs = fi.Create();
- fs.Close(); // 施放资源
注意:任何文件操作后,一定要做清理工作,最好是将文件操作的动作放在try块中,在finally中完成施放资源的操作。