为什么sp打开文件后就变成了文件只读模式式



m_spDoc、m_spDocs这些对象都没有问题保存后嘚文件也可能由WORD2007应该程序打开,没有兼容模式字样但代码打开就不好用了。

12年毕业于东华理工大学文法艺术學院广告学获得第六届大广赛三等奖,现就职广州维尔吉姆健身服务有限公司


如果该文档设置了保护模式只允许阅读,也就是打开启動时候提示的“文件只读模式式”是无法编辑的,需要密码删除文件只读模式式的设置才可以进行编辑

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

文件分为外部文件内部文件外部文件包括外部设备(如键盘和屏幕)以及磁盘上的文件,而内部文件指在内存中可以像磁盘文件一样进行操作的数据块

为了对文件進行操作,需要使用逻辑设备与它们连接外部文件可以通过open(unit=id,file='filename')的方式打开,id便是逻辑设备的标识符可以用来读写,也能用close关闭文件设備号的取值范围为-3276832767
Fortran预定义了4种外部文件(设备):

缺省状态下是键盘和显示器

此前所有的print *, ...语句就是表示向显示器输出*设备不能被关閉。

内部文件对应的逻辑设备可以用一个变量名来表示:

外部文件的访问方式有两种:顺序访问和直接访问;而文件结构有三种:格式化攵件、无格式文件和二进制文件这样组合出来的文件有六种。

以可读的字符串形式进行(顺序)读写文件打开时在文件开头写入(文件原有数据会被清空),之后每次在文件末尾处写入一条记录所有记录的大小不定,且由回车符加换行符(即\r\n)分隔下面是一个例子:

    '(All)'为一种格式,读写格式化文件时必需数字以可读的字符串形式写入。

所有的记录同样用\r\n分隔但所有记录的大小一样,而且在打开文件时需要指定每个记录的大小(字节数):

    !在第三个记录里写入65(以字节形式)

记录不再用\r\n分隔而且每个记录的大小也可以不同。文件內容的排序方式为:记录1大小(字节数) + 记录1 + 记录1大小 + 记录2大小 + 记录2 + 记录2大小+记录3大小+记录3 + 记录1大小……每个记录的前后分别用1个字節来表示该记录的大小下面是个例子:

记录不用任何特殊方式分隔。每个记录包含相同的字节数:

数据就是以字节序列的方式存放在文件中没有添加任何表示文件结构的特殊字节。这种文件的打开方式为form='binary'(我的gfortran不支持这种形式的文件……)

与无格式直接文件类似,所囿记录的大小一样其大小由open函数的recl参数指定。记录中未被使用的部分由未定义的字节填充

下面贴出四类文件操作语句

OPEN语句用于把设備号与文件名连接起来,并且对文件的各项性质进行指定它的一般形式为:


其中的各项参数的意义及取值如下:


  1) UNIT:设备号说明。unit是大于戓等于0的正整数设备号说明是OPEN语句的第—项时可以省略“UNIT=”。

  5) BLOCKSIZE:指定以字节为单位的设备缓存的大小默认值为一4字节整数。

  8) ERR:出错处悝说明其值是同一程序中的一条语句的标号,当OPEN语句执行出错时执行此语句如果省略该项,则出错时给出出错信息并终止运行

  9) FILE:文件名。file是一字符串表达式可以是空、合法的数据文件名字、设备名字或是作为内部文件 的变量。在WinNT/9x中允许使用长度大于8的文件名和长度夶于3的文件扩展名省略此项时,编译器将自动产生一个文件名唯一的临时文件这个临时文 件将在结束运行或与文件连接的设备关闭后被删除掉。

  11) IOFUS:指出一个新Quickwin子窗口是否为活动窗口其值为逻辑值。缺省值为真

  15) RECL:记录长度(单位为字节)说明。recl是指定的正整型量或算术表達式用来指定直接文件中的每条记录的字节数,或顺序文件中的记录的最大长度


由于用ENDFILE语句在文件中写入一条结束记录后,文件的指針被定位在结束记录之后所以若再想向同一个文件中添加更多的记录,就必须使用 BACKSPACE或REWIND语句对文件进行文件指针定位的操作在直接访问攵件中使用ENDFILE语句在文件中写入一条结束记录后,新的结束记录 后的所有老的记录都将被删除掉


除了以下几种情况外,使用BACKSPACE语句正好使文件的指针向前移动一条记录:本条记录前再没有记录时文件指针的位置不变;文件指针的位置在一条记录的中间时文件指针移到本条记錄的开始处;本记录的前—记录是文件结束记录时,文件指针移到文件结束记录之前

在Fortran中标准的输入设备是键盘,标准的输出设备是显礻器(控制台)—般的输入输出语句都是针对标准设备进行操作的,如果想对除键盘和显示器以 外的其他的物理设备进行读写操作就应该紦物理设备名描述为文件名,这样就可以像操作文件一样对其进行操作绝大多数设备名没有扩展名。以下是 WinNT/9x下的一些设备名

控制台(即屏幕,标准输出设备)

空(NLTLL)设备放弃输出,不包含任何输入

输入输出的方式包括格式化的方式和非格式化的方式。

非格式输入输出包括矗接列表I/O名称列表I/O。直接列表输出便是之前常看到的write (*), var1, var2, var3的形式这些直接附在write语句后,用逗号分隔的就是直接列表而直接列表输入以read (*,*), var1, var2, var3的形式。括号里的星号分别对应于设备单元(stdin)和输出格式输入可以用星号(*)表示重复,比如10*3表示输入10个3用斜杠(/)表示输入流的结束。

名称列表NAMELIST/名称列表组名/变量列表[[,]/组名/变量列表]...的形式表示比如名称列表输出的代码可以是:

名称列表的输出以&开头,紧接着名称列表组名之后紧接着变量/值赋值对。最后以反斜杠/结束名称列表输入是名称列表输出的逆过程,以&或$开头加上名称列表组名之后以涳格或换行与紧接在后面的赋值对隔开。最后以/、&或$表示结束星号同样可以用来表示重复。

格式化输入输出要更复杂些下面是格式化輸出的例子:

    !输出***81。因为格式为三位却要输出四位整型,所以显示星号
    !工程计数法,ENw.d[Ee]EN和E编辑描述符基本类似,区别在于EN输出数据的非指数部>分的绝对值强制在1到1000的范围内且指数可以被3整除。包括指数的区域的宽度是w个字符小数点后d个字符,指数宽度e是>可选的输絀:23.
  1. 制在l到10的范围内,而非E的0到1的范围输出:2.
上例中所有的描述符都是可重复编辑描述符,因为它可以重复:

不可重复编辑描述符可以妀变解释重复编辑符的方式还可以改变完成输入输出的方式。

传递string到输出单元

传递下n个字符到输出单元

返回记录中剩余字符的数目

指向丅一个记录或写记录结束符

如果I/O列表中没有其它记录则结束语句

设置后面的F和E编辑符的指数比例

下面贴出它们的详细用法:

1、撇号编辑符(單撇号’或双撇号”)用来插入所需的字符串如 WRITE(*,’(1X,’I=’,I3,’J=’,I4)’) I,J。如果需要输出的字符包括单撇号则用两个连续的单撇号代表一个被输出嘚撇号  (撇号编辑符为单撇号时)或用双撇号的编辑符,如WRITE(*,’(’I’ ’m a boy’)’)或WRITE(*,’(”I

2、H编辑符用来输出字符常量其一般形式为:nH字符串。n为字符串中 字符个数它的作用与撇号编辑符相似。例如上面用撇号编辑符的例子也可用H编辑符:WRITE(*,’(9HI ’m a boy)’)。用H编辑符必须准确地数出字符串中芓符(包括符号,. ’)的个数数错了就会造成错误。因此不建议使用H编辑符而应该用A编辑符和撇号编辑符来输出字符串。F77之所以保留H编辑符主要是为了与F66兼 容但在F95中已被废除。

3、X编辑符用来在输出时产生空格没有空格的输出时数据是连成一片的, 难以区分开为此需要插叺空格。它的一般形式为:nXn为插入的空格数,如WRITE(*,’(1X,’I=’,I3,5X,’J=’,I4)’) I,J在数据I和字符串’J=’之间插入5个空格注意第一项中的1X,在行式打印机上鈳作为纵向走纸控制符但在输出到文件和屏幕时,按Visual Fortran的默认编译它仅仅为空一格

4、纵向控制符,在把格式记录中的信息传送到打印设備上(打印机或终端)时格式说明中的第一个字符不被印出,这个字符作为纵向间隔控制标志称为纵向控制符。它们的功能在下表中列出

Compatibility项。对于输出到文件的情形在打开文件的OPEN语句中加上说明项CARRIAGECONTROL='FORTRAN'。这时 每行记录的第一个字符被当作控制符可能产生输出的数字或字符被吃掉的情形。另外重叠印刷功能仅对于行式打印机有效对于终端和文件的输出其效果是覆盖。


5、斜杠(/)编辑符的作用是结束记录在本行嘚输出并从下一行开始输出 下一个记录如果有两个连续的斜杠,相当于增加一个空行输出如果在编辑符的最后出现斜杠,也是再输出┅个空行用n个连续的斜杠,可以达到输出n-1个 空行的效果如WRITE(*,’(I3,I4/I1,I2//3F8.2/)’) I,J,M,N,X,Y,Z 的输出第一行为I,J的值,第二行为M,N的值第三行为空行,第四行是X,Y,Z的值苐五行为空行。


6、反斜杠(\)编辑符和美元($)编辑符的作用相同都是在输出一个记录行后取消回车符。常用于输出字符串与输入数据显示于屏幕同一行的情形


7、位置编辑符(T,TL,TR)在用于输出时,指出将要输出到记录上的下一个字符的位置它们的一般形式为:Tn,TLnTRn。n是非零正整数
T指明记录相对于左Tab端的位置,记录上的下一个字符输出第n个字符的位置上对于行式打印输出,因为记录的第一个字符作为纵向控制符不被打印所以Tn是定位在打印记录的第n-1个字符的位置上。在这个位置之前若没有字符输出则填满空格。


TL用于输出时指明把记录上的下一個字符输出到从当前位置向左移n个字符的位置上。如果左移已到记录的第一列则不再向左移,即向左移至多回退到第一 列TR用于输出时,指明把记录上的下一个字符传输到从当前位置向右移n个字符的位置上如WRITE(*,’ (TR10,F6.2,TL16,F6.2)’) 4.25,

8、冒号编辑符,当I/O列表中没有更多的数据顶时冒号(:)编辑苻使格式控制结束。此编辑将常常用于FORMAT语句中没有要输出的数据项时的输出结束

9、P编辑符设置比例因子以改变小数点位置,它用于实数變量编辑描述符 如F、E和G编辑符其作用范围延续到下一个比例因子的设置处。它的一般形式是:kPk是一有符号整数以指定小数点向左或向祐移几位,k取值范围在 -128至127之间在每一个输入输出语句开始时,这个比例因子被初始化为O输出时,正k向右移负k向左移(输入时相反)。比唎因子对下面格式编辑

10、SPSS和S编辑符在数字输出字段中控制着任选加号(+)的打印。SP在其后所有正数值域的位置输出加号SS为不输出加号,S重噺储存SS使其后不输出加号

格式化输入的编辑符与格式化输出类似。多出了一些编辑符:

在数字输入字段中控制着空格的解释

忽略数字輸入字段中内嵌和后续空格,使格式控制器仅使用字段上的所有非空格字符并使它们向右对齐。

使结尾空格符和分散空格符为零而开頭空格符仍为零。

返回当前输入记录中剩余的字符数对应的I/O列表中的数据项必须是整型或逻辑型的。

下面贴两段格式与I/O列表的关系:
输絀格式指定和I/O列表

在输出语句执行时I/O列表中的每一项都和一个可重复编辑符联系(I/O列表中的复型数据需要两个编辑符),非重复编辑符不和I/O列表中的数据项联 系如果I/O列表包含一个或多个数据项,则在格式指定时至少有一个可重复编辑符空的编辑指定()只能用在I/O列表没有数据項的情况。一条编辑指定为 空的FORMAT()格式WRITE语句输出的是回车换行

在格式输入输出过程中,格式控制器从左向右扫描格式数据项下面列出了格式控制器可能碰到的具体情况及相应的解释:

1) 如果I/O列表中出现了可重复编辑符和相应的数据项,该数据项和编辑符是互相联系的该数據项的输出会在编辑符的格式控制下执行。如果没有相应的数据项格式控制器将中止输出即多余的编辑符无效。

2) 如果I/O列表中项数多于格式说明中的可重复编辑符个数即WRITE语句中的输出项表列中还有末输出的元素,而格式说明中的编辑符已用完则重新使用该格式说明,但從下一行开始产生一个新记录

3) 如果在格式说明中包含有重复使用的编辑符组,则当格式说明用完后再重新使用时只有最右面的一个编輯符组(包括其重复系数)和它右面的编辑符被重复使用。

4) 遇格式说明的右括号(即最后面一个括号)或斜杠“/”时结束本记录的输出,但不意菋停止全部输出只要I/O列表中还有未输出的量,将重复使用格式说明 或按斜杠右面的格式说明组织输出右括号与斜杠的不同是:当扫描箌右括号而列表中已无数据项时,输出即告结束而斜杠只表示结束本行输出,即使此时已无输 出变量要输出输出并未停止,它会重新開始一个新记录直到遇到右括号或非重复编辑符为止。

5) 如果出现冒号编辑符(中止格式控制)且I/O列表中没有其它项则格式控制器将中止输叺输出。

输入格式指定和I/O列表

一条编辑指定为空的FORMAT()格式READ语句将跳过相邻的下一个记录除非输入输出设置成ADVANCE=’NO’,这时文件位置将保持不變记 录中的字符如果少于编辑符指定的长度,在右侧会填以空格除非在OPEN语中指定PAD=’NO’。用户输入的空格的解释取决于空格编辑描符(BN或 BZ)嘚作用或OPEN语句中的BLANK=选项BN和BZ的优先级比BLANK=选项要高。

总结起来输入输出的语句包括

输入数据,和格式化顺序READ语句类似

定位到文件上┅个记录开始处

断开和一个单元(文件和设备)的连接

从相关文件中删去一条记录

返回一个单元或外部文件的属性

使一个单元号和一个文件或設备相连接

向星号单元(屏幕)输出数据

从一个文件向I/O列表中的项目输入数据

释放先前被READ语句锁定的相关或顺序文件中的一个记录

从一个I/O列表Φ的项目向文件输出数据 

我要回帖

更多关于 文件只读模式 的文章

 

随机推荐