精华内容
下载资源
问答
  • C#编写、在窗体中打开帮助文档只读的,别人无法修改
  • 对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾等。 具体分析如下: 一、哪种方式...
  • 只读模式打开文件

    千次阅读 2015-10-08 10:08:23
    有时,你只是想查看一个文件,而没打算修改它。有一个风险是你想都没想就输入了一个 "w" 命令。要避免这个问题,以只读模式编辑这个文件。 要用只读模式启动 Vim,可以使用这个命令: vim -R file 在 Unix,如下...
    有时,你只是想查看一个文件,而没打算修改它。有一个风险是你想都没想就输入了一个 "w" 命令。要避免这个问题,以只读模式编辑这个文件。 要用只读模式启动 Vim,可以使用这个命令: vim -R file 在 Unix,如下命令可以完成相同的功能: view file 现在,你就在用只读模式阅读这个文件 "file" 了。但你执行 ":w" 命令的时候,你会得 到一个禁止写入的错误信息。 当你试图修改这个文件时,Vim 会给你一个告警提示:W10: Warning: Changing a readonly file 即使这样,你的修改还是会被接纳的。有可能你只是想排列这些文本,以便阅读。 如果你确实要改动这个文件,在 write 命令前面加上 ! 可以强制写入。 如果你的确想禁止文件修改,用这个命令: vim -M file 现在任何对文件的修改操作都会失败。例如,帮助文件就是这样的。如果你要在上面作修 改,你会得到一个错误提示: E21: Cannot make changes, 'modifiable' is off 你可以设置 -M 参数使 Vim 工作在只读模式。这个方式仍然取决于用户的意愿,因为你 可以用下面的命令去掉这层保护::set modifiable :set write
    展开全文
  • 文件打开方式当我们用open()函数去打开文件的时候,有好几种打开的模式。"r"->只读"w"->只写,文件已存在则清空,不存在则创建。"a"->追加,写到文件末尾"b"->二进制模式,...

    文件打开方式

    当我们用open()函数去打开文件的时候,有好几种打开的模式。

    "r"->只读

    "w"->只写,文件已存在则清空,不存在则创建。

    "a"->追加,写到文件末尾

    "b"->二进制模式,比如打开图像、音频、word文件。

    "+"->更新(可读可写)

    这个带"+"号的有点难以理解,上代码感受下。

    ?

    1

    2

    3

    4

    withopen("foo.txt","w+") as f:

    f.write("bar ")

    f.seek(0)

    data= f.read()

    可以看到,上面这段代码,它不但可以写,还可以读出来。注意要先定位到开头,f.seek(0),不然读出来的是空数据。

    一些人可能会有迷惑,既然带"+"号是可读可写,那"w+"跟"r+"有什么不同。

    那就是,

    "w+"会清空,会创建 (文件已存在则清空,不存在则创建。)

    "r+"不清空,不创建

    不要用二进制模式打开文本文件

    先看下面代码的“诡异”现象。

    假设在windows下,我有个f.txt文件,里面的内容是下面这样的。

    ?

    1

    2

    hello

    world

    代码一,

    ?

    1

    2

    3

    4

    withopen("f.txt","r") as f:

    print f.readlines()

    withopen("f.txt","rb") as f:

    print f.readlines()

    输出

    ?

    1

    2

    ["hello ", "world "]

    ["hello ", "world "]

    代码二,

    ?

    1

    2

    3

    4

    withopen("f.txt","rb") as f:

    data= f.read()

    withopen("f.txt","w") as f:

    f.write(data)

    打开文件,变成了下面这样,

    ?

    1

    2

    hello^M

    world^M

    首先,先理解换行符" "跟回车符" "的概念。

    " ",换行符(LF,Line-Feed ),指新的一行。

    " ",回车符(CR,Carriage-Return),指回到行头。

    因为在不同系统下的换行标识是不一样的。

    ?

    1

    2

    3

    windows->" "

    unix->" "

    mac->" "

    这就是为什么windows下的txt在linux打开的时候行尾会有"^M"。

    这就是为什么我在linux下跑脚本导出游戏数据下到本地windows打开变成了一行。

    其实文本文件也是二进制文件,是文本编码的二进制文件,文本文件对一些不可见字符进行了处理,增加可读性。

    在python中,可以通过os.linesep获得当前系统的换行标识。比如在windows下,os.linesep是" "。

    在python中操作换行标识的时候,并不用管是在什么平台下,直接用" "就行了,python会自动根据不同系统转成不同标识。

    有了上面这些理论依据,就可以解析本文开头代码的“诡异”现象了。

    代码一中,用文本模式打开的文件,换行标识会被python处理成" ",而用二进制模式打开则原封不动。

    代码二中,用二进制模式打开,用文本模式写入。二进制打开原封不动还是" ",而文本模式写入的时候因为python会把" "转成" ",所以其实就等于是写入了" ",于是就多了个"^M"。

    展开全文
  • 我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾。 具体的说: 1...

    转自:http://blog.sina.com.cn/s/blog_50b7dd7101012979.html

    我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾

    具体的说:

    1。以哪种方式打开一个文件?

    ANSI C规定了标准输入输出函数库,用 fopen()函数打开文件。fopen()函数的调用方式一般为:

    FILE *fp;

    fp=fopen(文件名,使用文件方式);

    使用文件方式见下表:

    使用文件方式

    含义

    "r"(只读)

    为输入打开一个文本文件

    "w"(只写)

    为输出打开一个文本文件

    "a"(追加)

    为追加打开一个文本文件

    "rb"(只读)

    为输入打开一个二进制文件

    "wb"(只写)

    为输出打开一个二进制文件

    "ab"(追加)

    为追加打开一个二进制文件

    "r+"(读写)

    为读/写打开一个文本文件

    "w+"(读写)

    为读/写创建一个文本文件

    "a+"(读写)

    为读/写打开一个文本文件

    "rb+"(读写)

    为读/写打开一个二进制文件

    "wb+"(读写)

    为读/写创建一个二进制文件

    "ab+"(读写)

    为读/写打开一个二进制文件

    同一个文件从磁盘读取文件到内存(程序数据区或者缓存区)时,两种方式下,内存中的内容一般不相同,这就是两种打开方式的实质性差别

    这里要说一个背景,那就是在windows下,它会做一个处理,就是写文件时,换行符会被转换成回车,换行符存在磁盘文件上,而读磁盘上的文件时,它又会进行逆处理,就是把文件中连续的回车,换行符转换成换行符。

    因此,在读取一个磁盘文件时,文本方式读取到文件内容很有可能会比二进制文件短,因为文本方式读取要把回车,换行两个字符变成一个字符,相当于截短了文件。但是为什么仅仅是可能呢?因为可能文中中不存在连着的4542这两个字节(45CR回车的ASCII码,42是换行符CLASCII码),也就不存在截短操作了,因此读到的内容是一样的。

    具体的来说,文件文件(以文本方式写的),最好以文本方式读。二进制文件(以二进制方式写的),最好以二进制方式读。不然可能会不正确。上面的已经分析了。

    2.以什么函数读写文件?

    数据怎么在磁盘上写不是由文件打开方式决定的,而是由写函数决定的。数据怎么从磁盘上读也不是由文件打开方式决定的,而是由读函数决定的。

    上面说的数据怎么写是说指,一种类型的变量是怎么存的?比如int 12,可以直接存12的二进制码(4个字节),也可以存字符1,字符2.

    数据怎么读的是指,我要读一个int变量,是直接读sizeofint)个字节,还是一个字符一个字符的读,直到读到的字符不是数字字符。

    C里面有两组文件读写函数恰好支持上面两种方式的读写:

    1.fread(buffer,size,count,fp),fwrite(buffer,size,count,fp)。用来读写一个数据块。它对应的是第一种存储方式。直接按类型的字节长度指定读写的字节数。

    2fprintf函数和fscanf函数.它对应的是第二种读写方式。即以字符的方式读写。(fprintf函数、fscanf函数与printf函数、scanf函数的作用相仿,都是格式化读写函数。fprintffscanf函数的读写对象是磁盘文件,而printfscanf函数的读写对象是终端。)

    它们的一般调用格式为:

    fprintf(文件指针,格式字符串,输出列表);

    fscanf (文件指针,格式字符串,输入列表);

    3怎么判断文件尾?

    C语言,或更精确地说成 C标准函式库中,有一个特别的字符EOFstdio.h中这个定义 #define EOF (-1) ,它表示:文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。

    但是,C语言中,当把数据以二进制形式存放到文件中时,就会有-1值的出现,此时不能采用EOF作为二进制文件的结束标志。为解决这个问题,ANSI C提供一个feof函数,用来判断文件是否结束。如果遇到文件结束,函数feoffp)的值为1,否则为0.

    feof函数既可用以判断二进制文件是否结束,也可以用以判断文本文件是否结束。但是要注意feof用以判断文本文件尾时,如果代码编写不当,可能会把文本文中中的文件结束符EOF也读取出来了;具体见http://baike.baidu.com/view/656648.htm

    4.知道一个文件是文本文件,还是二进制文件,更多的提醒我们,应该选择哪种读写函数。

    正如2所说的,数据怎么存不是由文件打开方式决定的,而是由读写函数决定的。

    比如说,我们以二进制文件的方式打开一个文件(实际上只是指明了要进行换行符的转换),它更多的是代表一种理念(虚的):我希望这个文件里面的数据是这样的,int类型占4字节,char1个字节。这种模式下,我用fread(buffer,size0f(int),1,fp)读取一个intint变量中。

    我们记住

    我们在对一个文件进行操作以前,首先,我们要清楚这个文件到底是文本文件还是二进制文件文件文件用文本方式打开,二进制文件用二进制方式打开

    如果我们要操作一个二进制文件,那么我们就以二进制方式打开(理论上也可以以文件方式打开,但是如果写的二进制数据里面有45时,会转化成45,42存储,见1.这是很有可能发生的)。同时读写的时候用freadfwrite这两个函数。

    如果我要操作一个文本文件,那么我们就以文本的方式打开(理论上也可以以二进制方式打开,但是不保险)。同时读写的时候用读写字符的那些函数fprintf,fscanf ,fgetc,fputc,putw,getw,fgetc,fputs

     

    展开全文
  • 文件“..\Log\all_info.txt”正由另进程使用,因此该进程无法访问此文件 原因: 日志文件通过lognet生成的日志文件(C#使用log4net记录日志),自动任务一直在进行,文件流没有关闭。 所以获取文件内容时,会提示...

    读取txt文件时,提示异常:

    文件“..\Log\all_info.txt”正由另一进程使用,因此该进程无法访问此文件

    原因:

    日志文件通过lognet生成的日志文件(C#使用log4net记录日志),自动任务一直在进行,文件流没有关闭。

    所以获取文件内容时,会提示进程被占用。

    尝试方案:

    通过System.IO.File读取 -- ReadAllLines/ReadAllText等方法,报错进程占用异常

    var fileContent = File.ReadAllText(_filename);

    通过FileStream读取数据

    1     using (FileStream fsRead = new FileStream(_filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    2     {
    3         int fsLen = (int)fsRead.Length;
    4         byte[] heByte = new byte[fsLen];
    5         fsRead.Read(heByte, 0, heByte.Length);
    6         string myStr = System.Text.Encoding.UTF8.GetString(heByte);
    7     }

    测试:OK

    重点在FileShare这个参数,FileShare.ReadWrite 允许打开文件后,依然可以进行读取。

    也使用StringBuilder读取行数据,通过FileStream和StreamReader处理数据流:

     1 public static string ReadTextFromFileWithReadOnlyMode(string filename)
     2 {
     3     string content;
     4     using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
     5     {
     6         using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default))
     7         {
     8             StringBuilder sb = new StringBuilder();
     9             while (!sr.EndOfStream)
    10             {
    11                 sb.AppendLine(sr.ReadLine() + "<br>");
    12             }
    13             content = sb.ToString();
    14         }
    15     }
    16     return content;
    17 }

     

    展开全文
  • 使用openFileDialog和saveFileDialog打开和保存*.rtf文件的应用实例,如果在openFileDialog1中选定文件只读方式打开,那么ReadOnly属性设置为true,在richTextBox1中不能修改文本,C#源代码 用VisualStudio2008创建 ...
  • 打开方式:“r”(只读) 为输入打开一个文本文件“w”(只写) 为输出打开一个文本文件“a”(追加) 向文件文件尾添加数据“rb”(只读) 为输入打开一个二进制文件“wb”(只写) 为输出打开一个二进制文件“r+”(读写) 为...
  • 在 UNIX/Linux 平台中,用文本方式或二进制方式打开文件没有任何区别。 在 UNIX/Linux 平台中,文本...在 Windows 平台中,如果文本方式打开文件,当读取文件时,系统会将文件中所有的\r\n转换成一个字符\n,如...
  • r : 只读方式打开文件 , 文件必须存在 ; 文件不存在打开失败 ; + : 读写方式打开文件 ; w : 打开只写文件 , 文件不存在创建文件 , 文件存在覆盖文件 ; a : 打开只写文件 , 文件不存在创建文件 , 文件存在追加文件...
  • Python3中打开文件方式(With open)

    万次阅读 多人点赞 2018-08-05 19:53:16
    python文件读写文件是最常见的IO操作... 读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件...
  • 只读打开一个文本文件,只允许读数据  “wt”  只写打开或建立一个文本文件,只允许写数据  “at”  追加打开一个文本文件,并在文件末尾写数据  “rb”  只读打开一个二进制文件,只允许读数据  “wb...
  • 1.打开文件得到文件句柄并赋值给一个变量。( 变量=open(“文件名”,“模式”, encoding=&amp;amp;amp;quot;解码方式”) 操作即为得到文件句柄并赋值给变量的过程。) 2.通过文件句柄对文件进行操作。( 变量....
  • python读写方式  python的读写,在实际应用中还是很广泛的,有必要系统性的学习一下,便于处理问题时的抉择和对现象的合理解释...打开文件进行读取显示会用到open(‘filename’,‘r’)...... r 以只读模...
  • 它添加了几新命令来处理选定的文本、添加新文本和处理打开文件。 它于 2001 年作为 Visual C++ 6 的加载项开始使用,此后针对各种版本的 Visual Studio 进行了多次重写。 它的一些命令是: 执行文本 执行文件 ...
  • C语言文件打开方式

    千次阅读 2019-03-31 19:00:51
    操作后面加“t”是表示打开文本文件 加“b”是表示打开二进制文件 什么都不加表示默认打开文本文件
  • C语言文件操作

    千次阅读 多人点赞 2019-11-04 20:58:15
    在C语言中,操作文件之前必须先打开文件,所谓“打开文件”,就是让程序和文件建立连接的过程。 打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,...
  • 按ESC 和:wq进行保存退出,提示 E45: ‘readonly’ option is set (add ! to override)错误 按ESC和wq!...在网上看了很多解答,大多是句话: 网上答案: :w !sudo tee %; 或者是: 你有权限修改...
  • 切换数据库 或者 创建数据库 (如果切换的数据库是没有的话,就会自动创建一个数据库) use 数据库名字 删除数据库 db.dropDatabase() 查看当前数据库 db 创建集合 db.createCollection(name,option) option...
  • C语言之文件打开模式

    2019-07-04 11:16:53
    下面这些就是文件操作说明: ...wb 只写方式打开或新建一个二进制文件,只允许写数据。 wb+ 读写方式打开或建立一个二进制文件,允许读和写。 r 打开只读文件,该文件必须存在,否则报错。 r+ 打开可读写的文件...
  • Linux下通过vi修改只读文件

    千次阅读 2019-09-29 15:56:25
    打开一个只读文件 $ vi /etc/crontab 此时会进入crontab的编辑界面,通过按键 ESC 可以进入命令模式,按键 I 进入插入模式 但是!如果此时没有权限进行修改的话,虽然可以插入编辑,但是最后无法正常地保存退出 ...
  • 文件打开方式

    千次阅读 2019-06-27 21:49:07
    rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。 w+ 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会...
  • 文件打开方式当我们用open()函数去打开文件的时候,有好几种打开的模式。"r"->只读"w"->只写,文件已存在则清空,不存在则创建。"a"->追加,写到文件末尾"b"->二进制模式,...
  • 文件属于外存的范畴: 其实不管是文本文件还是二进制的文件,其本质都是二进制的方式进行存储的,只是解释的方式不同罢了,文本文件是将原本的...r 是以文本文件方式打开并且是只读方式打开 rb 是二进制的凡...
  • python读取txt文本文件

    千次阅读 2019-12-14 00:50:52
    1)在任意路径下创建date.txt(txt 文本文件) 双击打开文件输入任意内容: 例如: I’m hello world python java c/c++ 2)新建一个python文件,任意取名字:例如read.py 使用编辑器打开read.py文件输入一下内容: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,249
精华内容 33,699
关键字:

以只读方式打开一个文本文件