file.close,fileclose之后为什么值变了

http://www.itjxue.com  2023-01-09 00:03  来源:未知  点击次数: 

Python中file.close方法的使用与否

如果文件打开方式是'w',且最后没有写file.close()的话,文件会是空的。

这样会由于程序员的疏忽造成不好的后果。从python2.5开始,你可以避免显式地使用file.close()函数!

file(文件)对象常用函数

file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:

1、file.close()

close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。

当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。

举例:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 打开文件

fo = open("runoob.txt", "wb")

print "文件名为: ", fo.name

# 关闭文件

fo.close()

2、file.flush()

flush()? 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。

一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

举例:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 打开文件

fo = open("runoob.txt", "wb")

print "文件名为: ", fo.name

# 刷新缓冲区

fo.flush()

# 关闭文件

fo.close()

3、file.fileno()

fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。

举例.........

使用File操作后,怎么释放文件,File.close根本就没有

FileStream.Close方法关闭当前文件流并释放与之关联的所有资源(如文件磁盘缓冲区)。

注意:创建文件流后,无论是读取还是写入操作,最后必须用Close方法关闭文件流!这样做的目的一方面是释放文件操作所占用的系统资源,另一方面避免文件有出现无法预料的结果。

【例1】写文件操作后关闭文件流

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

using System.Text;

using System.IO;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

// 打开文件流准备写入操作

FileStream fs = new FileStream("d:\\data.txt",

FileMode.Create,

FileAccess.Write);

string text = "输入文本文件的信息:你好,世界!";

byte[] b = Encoding.Default.GetBytes(text);

fs.Write(b, 0, b.Length);

// 使得所有缓冲的数据都写入到文件中

fs.Flush();

// 方法关闭当前文件流

fs.Close();

}

}

}

【例2】读文件操作后关闭文件流

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

using System;

using System.Text;

using System.IO;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

// 打开文件流准备读取操作

FileStream fs = new FileStream("d:\\data.txt",

FileMode.Open,

FileAccess.Read);

// 文件读入缓冲区

byte[] buf = new byte[1024];

// 读取文件

int byteNum = fs.Read(buf, 0, buf.Length);

// 关闭文件流!

fs.Close();

// 显示读取的内容

string text = Encoding.Default.GetString(buf, 0, byteNum);

Console.WriteLine(text);

}

}

}

本回答由电脑网络分类达人 吕明推荐

评论

1 2

protorock0627

采纳率:86% 来自团队:C.Net开发 擅长: C#/.NET 数据库DB 嵌入式

其他回答

close的作用就是关闭文件流。

如果你开启了文件流在读取一个文件却没有close,那么这个文件一直被你的程序在占用。别人就无法再操作这个文件。(当然,读还是可以的,只是无法写这个文件)

比如,你有两个程序,同时读取一个文件,并且不close,那么无论哪个程序都无法修改或删除这个文件。

我看了你的追问,关闭程序就可以不占用内存。是的,关闭程序就把内存给释放了,可问题是,你这个程序是短暂的寿命吗?你开发程序出来是给别人用的吧,那么这个程序就会一直开启状态,你不能随便去关闭它。比如,一个网站,那是一直开启放在互联网上的。一个游戏,一直开启给玩家玩的。你可以经常去把这个程序关闭吗?无论是网站还是游戏,都会有很多用户访问你的程序,如果不做到释放内存,100个用户就要占用100个文件流,1000个用户占用1000个,你的程序和服务器能够支撑不住那么多信息的。所以要做到及时释放内存,保证程序能够正常运行。

文件读写操作以后如果不输入file.close语句会怎么样

文件或者类文件对象的close方法的作用主要有两个:

1. 释放资源。打开一个文件,对文件进行操作,这个过程需要消耗计算机的硬件资源,最主要的就是内存(比如接下来要说的"读写缓冲区"),调用close方法后,文件对象占用的资源就会被释放。

2.清空缓冲区。当你打开一个文件向里面写入数据或者从某个url获取远程html想对其进行解析,这时候就会用到缓冲区的概念。比如你要写入文件,你想写入文件的数据并不会直接输出到那个文件中,而是首先被输出到缓冲区,等到缓冲区满或者手动刷新时,才将缓冲区中已有的数据输出到文件中(这样设计的原因是避免了频繁I/O,提高了效率)。因此,close方法的另一个作用就是清空缓冲区中的数据(当然你也可以调用flush这样的方法)

如果不调用close方法关闭文件,首先占用的硬件资源被浪费,其次数据可能无法像预期的那样正确输出到文件,可能出现空白文件或者数据输出不完整的情况。此外,由于文件对象未关闭,你仍然可能对它进行操作,误操作的话会给调试惹不少麻烦,也有可能成为一种不安全因素。

(责任编辑:IT教学网)

更多

推荐Illustrator教程文章