关于c语言文件读写问题和文件读写标志的疑问

作者&投稿:段瑶 (若有异议请与网页底部的电邮联系)
C语言大文件操作疑问(fseek)~

是有这个限制的。
如果使用的标准的c函数的。
如果是你是32操作系统,c语言操作文件的大小是 2^31 ,2G

如果是你是64操作系统,c语言操作文件的大小是.2^63 ,8589934592 G


你说的问题肯定,出在32位操作系统上。
一是:
操作系统能不能允许创建2G以上的文件了,具体要看操作系统了。
如果不允许,你的问题就没什么意义了!
如果操作系统允许的话,都会提供,系统函数让你调用的。
你得自己去找资料了。
===============
你可以看一下,sqlite的源代码,我的3-5-4版本
他不用是用c语言标准库的。函数,能windows提供的系统函数SetFilePointer,ReadFile



static int winRead(
sqlite3_file *id, /* File to read from */
void *pBuf, /* Write content into this buffer */
int amt, /* Number of bytes to read */
sqlite3_int64 offset /* Begin reading at this offset */
){
LONG upperBits = (offset>>32) & 0x7fffffff;
LONG lowerBits = offset & 0xffffffff;
DWORD rc;
DWORD got;
winFile *pFile = (winFile*)id;
assert( id!=0 );
SimulateIOError(return SQLITE_IOERR_READ);
OSTRACE3("READ %d lock=%d
", pFile->h, pFile->locktype);
rc = SetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN);
if( rc==INVALID_SET_FILE_POINTER && GetLastError()!=NO_ERROR ){
return SQLITE_FULL;
}
if( !ReadFile(pFile->h, pBuf, amt, &got, 0) ){
return SQLITE_IOERR_READ;
}
if( got==(DWORD)amt ){
return SQLITE_OK;
}else{
memset(&((char*)pBuf)[got], 0, amt-got);
return SQLITE_IOERR_SHORT_READ;
}
}

因为字母对应的ascII码a-z为65-90, A-Z为97-122。这段代码的意思是将每个字母向后移8位即i(73)变为a(65),j(74)变为b(66),k(75)变为c(67)...,
回到你的问题,每个字母都递减会出现这样的问题:假如你输入的是b对应的ascII码为66,再减8就是58了,没有字母的ascII码为58(对应的符号为‘:’),这就会出现乱码。依次类推所有65+8=73和97+8=103以下的字母加密之后都是乱码形式出现的。为了避免这种情况,加了一个循环即26,这样例子中的b加密之后会变成66-8+26=84 即t。这样就能保证即使是加密,加密出来的字符也是在字母范围之内的

先回答你第一个问题:因为fgets(out,5,fp)读取的是你输入字符串以后的字符,那是不确定的,所以会出现乱码,
第二个问题:w+是将文件以读写方式打开,如果里面存有内容将会清零,以供写入
第三个问题:当你输入完字符以后文件的指针是指向末尾的,所以fget(out,5,fp)得到的是不是从头开始的字符,而是从最后一个字符以后开始的,
所以,你的问题就很容易解决了,只要让文件指针重新指向文件头即可:在putchar(10)后面加上一句:rewind(fp)就可以了

fputs("
",fp); 

rewind(fp); //写入后使文件指针回到文件首,再读取

fgets(out,5,fp);


应该以追加模式打开 要不然任何w模式打开文件都会重写


C语言中指针读写文件,问什么记事本都是乱码,怎么改呢?
从代码看,在Windows平台是有大概率会乱码,假如你的商品信息数组里存放了换行就一定会乱码。主要问题在文件的打开方式不对,fread, fwrite函数最好以二进制模式打开文件,即打开方式加上b,即(rb, wb)。在unix\/Linux系统应该没问题。以下是问题解释:二进制和文本模式的区别 1.在windows系统中,文本...

C语言文件写入问题
'r'只读方式打开,将文件指针指向文件头。'r+'读写方式打开,将文件指针指向文件头。'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。'a'写入方式打开,将文件指针...

c语言的文件操作
二、文件打开 在进行文件操作之前,需要先打开文件。C语言中提供了多种打开文件的函数,如`fopen`等。这些函数会返回一个文件指针,如果打开文件失败,则返回NULL。打开文件时需要指定文件的路径和打开方式。三、文件读写 文件打开后,就可以进行读写操作了。对于文本文件,可以使用`fscanf`和`fprintf`函数...

C语言文件的读写
一个c语言读写文件程序:include "stdio.h"include <stdlib.h> main(){ FILE *fp1;\/\/定义文件流指针,用于打开读取的文件 FILE *fp2;\/\/定义文件流指针,用于打开写操作的文件 char text[1024];\/\/定义一个字符串数组,用于存储读取的字符 fp1 = fopen("d:\\\\a.txt","r");\/\/只读方式打开...

C语言读写文件
是正则表达式,意思是忽略(前面的星号表示)换行符之前的字符(^\\n表示),并且忽略换行符(%*c表示)\/\/--- include <stdio.h> define MAX 50 \/*a.txt文件中一行最多的数字个数*\/ int main(void){ int a,b[MAX],i,j;FILE *fp=fopen("c:\\\\a.txt","r"),fp2=fopen("c:\\\\b.txt"...

C语言如何读取文件?
C语言读取文件的具体步骤如下:我们需要准备的材料分别是:电脑、C语言。1、首先我们打开需要读取的文件,点击打开左上角文件中的“另存为”。2、然后我们在弹出来的窗口中点击打开保存类型。3、然后我们在弹出来的窗口中点击选择“C source file(*.c)”,之后点击保存即可在C语言中读取出来了。

C语言中对文件进行读写操作必须先将文件怎么办
fopen函数原型:FILE * fopen(const char * path,const char * mode);第一个参数是路径,第二个参数是打开文件的方式,有以下几种:r 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rb+ 读写打开一个二进制文件,允许读数据。rw+ 读写打开一个文本文件,允许读...

c语言怎么理解文件的输入输出相当于读和写?这两个一直搞反
这个问题值得一说。C的文件实际上是在没有大型数据库系统时候的一个过渡解决方案,几乎所有的编程语言都有写文件也就是创建文件的方法。目的就是把程序产生的数据给保存出来,也就是存储到硬盘上。因此,从这个角度去看文件读写就可以这样理解了,写文件就是创建文件,当然也可以向创建成功的文件中添加...

C语言的文件读写
回车和换行符转换成一个换行符 -- 书本用的是老概念。键盘输入,我们按Enter键,C\/C++语言收到的就是'\\n'(新行符)。打字机老概念:回车和换行,回车就是回到本行开始位置,换行就是到下一行。回车符 '\\r',换行符'\\n',老码 CRLF。“从键盘输入4个学生的数据是ASCII码,也就是文本文件”,...

C语言 文件操作,要读取一个txt文件内容
其次,使用文件读写函数读取文件。在C语言中提供了多种文件读写的函数:·字符读写函数 :fgetc和fputc ·字符串读写函数:fgets和fputs ·数据块读写函数:freed和fwrite ·格式化读写函数:fscanf和fprinf 最后,在文件读取结束要使用文件关闭函数fclose()关闭文件。下面以格式化读写函数fscanf和fprintf...

库车县18576793566: C语言文件读写问题 -
屈宁蛇胆: 刚才仔细看了一下fwrite()函数说明,原来是这样的:fwrite()函数写入到文件的位置与文件的打开模式有关,如果是r+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变;如果是a+,则从文件的末尾开始添加,文件长度加大,而且是fseek函数对此函数没有作用.

库车县18576793566: C语言关于文件的读写问题? -
屈宁蛇胆: 你可以这样:fscanf(pfile, "%s:", name);这样读取的时候只要读到:就会停下, 相当于是一个分隔符.

库车县18576793566: c语言文件读写 实例 -
屈宁蛇胆: C语言标准库提供了一系列文件I/O函数用于文件操作,比如fopen()用于打开文件、fread()、fwrite()用于读写文件、fseek()用于设置操作位置等等,一般C语言教程上都有文件I/O一章,细致内容,可以找本教科书学习一下. 下面的示例,是...

库车县18576793566: c语言关于文件“读”“写” -
屈宁蛇胆: 我学linux的,里边所有的东西都基本可以看成文件,包括键盘显示器,fread是从文件中读取到内存中,但是fscanf和fread作用相似,常见的是fscanf和printf同时出现,前者是将内容读取到内存中,后者是将内容打印出来.fwrite可以将内容写入文件,但是你打开文件看会出现乱码,但是用fread独处的不会乱码 fprintf可以存入文件不会乱码

库车县18576793566: c语言简单的文件读写问题 -
屈宁蛇胆: if(fp==NULL) printf("\nuser not found");执行了这一句、可能id.txt文件没有打开.id.txt文件要和你的源文件在同一目录下

库车县18576793566: C语言中文件读写的问题!!! -
屈宁蛇胆: 有确定大小的或整块读写的用 fread/fwrite 对.每次读/写 64 字节n = fread(buf, 1, 64, file1);n = fwrite(buf, 1, n, file2);第二个参数是读写单元大小,第三参数是每次单元数,返回值 n 是实际读入/写出的单元数,这里单元应该是1字节,数量是 64.如果读写的是记录(结构体),因为要整个记录的读写,第二个参数应该是记录单元的大小.正常情况下返回的 n 应该都是 64 .if (n < 64) { if(feof(file1)) {/* reading finished */} else {/* reading error */}}

库车县18576793566: c语言文件读写“追加” -
屈宁蛇胆: 使用fseek()定位到相应的位置,使用fread()、fwrite()读写文件即可.下面是一个在1.txt的文件末尾追加hello world的示例: #include <stdio.h>#include <string.h>int main(){FILE *fp = fopen("1.txt", "a+");if (fp==0) { printf("can't open ...

库车县18576793566: C语言读写文件的时候怎么控制字符编码方式? -
屈宁蛇胆: 1. C语言读写文件有两种方式: 一种是文本方式,另一种是2进制方式.日文,中文,unicode, 都要用2进制方式.文件内容的编码和编码的转化,同一种编码的大端或小端编码,都要自己安排处理. 2. C语言不管读写都要通过fopen函数来,...

库车县18576793566: C语言文件的读写 -
屈宁蛇胆: 一个c语言读写文件程序:#include "stdio.h"#include main() { FILE *fp1;//定义文件流指针,用于打开读取的文件 FILE *fp2;//定义文件流指针,用于打开写操作的文件 char text[1024];//定义一个字符串数组,用于存储读取的字符 fp1 = fopen("...

库车县18576793566: 关于C语言读写问题 -
屈宁蛇胆: #include void main(){ FILE *fp; char a[4][4]; int i,j; fp=fopen("d:\\123.txt","r"); //注意这里文件的位置要和你计算机上的...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网