⑴ C語言文件讀寫結構體裡面的數據怎樣存到磁碟文件上
1、首先打開VC++6.0。
⑵ C#中讀取和寫入文件的過程,常用哪幾類
1、使用FileStream讀寫文件
文件頭:
復制代碼代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
讀文件核心代碼:
復制代碼代碼如下:
byte[] byData = new byte[100];
char[] charData = new char[1000];
try
{
FileStream sFile = new FileStream("文件路徑",FileMode.Open);
sFile.Seek(55, SeekOrigin.Begin);
sFile.Read(byData, 0, 100); //第一個參數是被傳進來的位元組數組,用以接受FileStream對象中的數據,第2個參數是位元組數組中開始寫入數據的位置,它通常是0,表示從數組的開端文件中向數組寫數據,最後一個參數規定從文件讀多少字元.
}
catch (IOException e)
{
Console.WriteLine("An IO exception has been thrown!");
Console.WriteLine(e.ToString());
Console.ReadLine();
return;
}
Decoder d = Encoding.UTF8.GetDecoder();
d.GetChars(byData, 0, byData.Length, charData, 0);
Console.WriteLine(charData);
Console.ReadLine();
寫文件核心代碼:
復制代碼代碼如下:
FileStream fs = new FileStream(文件路徑,FileMode.Create);
//獲得位元組數組
byte [] data =new UTF8Encoding().GetBytes(String);
//開始寫入
fs.Write(data,0,data.Length);
//清空緩沖區、關閉流
fs.Flush();
fs.Close();
2、使用StreamReader和StreamWriter
文件頭:
復制代碼代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
StreamReader讀取文件:
復制代碼代碼如下:
StreamReader objReader = new StreamReader(文件路徑);
string sLine="";
ArrayList LineList = new ArrayList();
while (sLine != null)
{
sLine = objReader.ReadLine();
if (sLine != null&&!sLine.Equals(""))
LineList.Add(sLine);
}
objReader.Close();
return LineList;
StreamWriter寫文件:
復制代碼代碼如下:
FileStream fs = new FileStream(文件路徑, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//開始寫入
sw.Write(String);
//清空緩沖區
sw.Flush();
//關閉流
sw.Close();
fs.Close();
方式一:用FileStream
復制代碼代碼如下:
//實例化一個保存文件對話框
SaveFileDialog sf = new SaveFileDialog();
//設置文件保存類型
sf.Filter = "txt文件|*.txt|所有文件|*.*";
//如果用戶沒有輸入擴展名,自動追加後綴
sf.AddExtension = true;
//設置標題
sf.Title = "寫文件";
//如果用戶點擊了保存按鈕
if(sf.ShowDialog()==DialogResult.OK)
{
//實例化一個文件流--->與寫入文件相關聯
FileStream fs = new FileStream(sf.FileName,FileMode.Create);
//獲得位元組數組
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);
//開始寫入
fs.Write(data,0,data.Length);
//清空緩沖區、關閉流
fs.Flush();
fs.Close();
}
方式二:用StreamWriter
復制代碼代碼如下:
//實例化一個保存文件對話框
SaveFileDialog sf = new SaveFileDialog();
//設置文件保存類型
sf.Filter = "txt文件|*.txt|所有文件|*.*";
//如果用戶沒有輸入擴展名,自動追加後綴
sf.AddExtension = true;
//設置標題
sf.Title = "寫文件";
//如果用戶點擊了保存按鈕
if (sf.ShowDialog() == DialogResult.OK)
{
//實例化一個文件流--->與寫入文件相關聯
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
//實例化一個StreamWriter-->與fs相關聯
StreamWriter sw = new StreamWriter(fs);
//開始寫入
sw.Write(this.textBox1.Text);
//清空緩沖區
sw.Flush();
//關閉流
sw.Close();
fs.Close();
}
string FileName = Guid.NewGuid().ToString() + ".txt"; //GUID生成唯一文件名
StringBuilder ckpw = new StringBuilder("\"憑證輸出\", \"V800\", \"001\", \"東風隨州專用汽車有限公司\"," + "\"F89自由項16\", \"F90審核日期:\"");
if (!FileIO.IsFolderExists(Server.MapPath("pzsc")))
FileIO.CreaterFolder(Server.MapPath(""), "file://pzsc/");
string filePath = Server.MapPath("pzsc") + "\\" + FileName;
System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, false, Encoding.GetEncoding("GB2312"));//創建的時候需要指定編碼格式,默認是UTF-8,中文顯示亂碼
sw.WriteLine(ckpw.ToString());
sw.Close();
方式三:用BinaryWriter
復制代碼代碼如下:
//實例化一個保存文件對話框
SaveFileDialog sf = new SaveFileDialog();
//設置文件保存類型
sf.Filter = "txt文件|*.txt|所有文件|*.*";
//如果用戶沒有輸入擴展名,自動追加後綴
sf.AddExtension = true;
//設置標題
sf.Title = "寫文件";
//如果用戶點擊了保存按鈕
if (sf.ShowDialog() == DialogResult.OK)
{
//實例化一個文件流--->與寫入文件相關聯
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
//實例化BinaryWriter
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(this.textBox1.Text);
//清空緩沖區
bw.Flush();
//關閉流
bw.Close();
fs.Close();
}
C#緩存流示例------>用緩存流復制文件
C#文件處理操作必須先導入命名空間:using System.IO;
背景:使用VS2005、一個按鈕、一個窗體、C#緩存流、把D:\KuGoo\愛得太多.wma復制到D:\並更名為love.wma,即:D:\love.wma
在按鈕的Click事件中添加如下代碼:
復制代碼代碼如下:
private void button1_Click(object sender, EventArgs e)
{
//創建兩個文件流 一個是源文件相關,另一個是要寫入的文件
FileStream fs = new FileStream(@"D:\KuGoo\愛得太多.wma",FileMode.Open);
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
//創建一個位元組數組,作為兩者之間的媒介
//好比兩個人拿蘋果,這個位元組數組就好比一個籃子,一個人作死的把蘋果送到籃子裡面,
//而我就可以作死得拿蘋果,通過這個媒介我們互不幹擾,
//不需要互相等待【她往籃子裡面放了蘋果我才可以去拿】,提高了效率
byte[] data = new byte[1024];
//創建兩個緩沖流,與兩個文件流相關聯
BufferedStream bs = new BufferedStream(fs);
BufferedStream bs2= new BufferedStream(fs2);
//fs作死的讀,fs2作死的寫,直到fs沒有位元組可讀fs2就不寫了
//好比,一個人作死的往籃子裡面丟蘋果,另一個人作死得往籃子裡面拿蘋果,直到籃子裡面沒有蘋果拿了為止
//即-->那個人沒有蘋果往籃子裡面放了
while(fs.Read(data,0,data.Length)>0)
{
fs2.Write(data,0,data.Length);
fs2.Flush();
}
//關閉流,好比兩個人累了,都要休息 呵呵o(∩_∩)o...
fs.Close();
fs2.Close();
}
C#內存流示例----->用內存流來讀取圖片
C#文件處理操作必須先導入命名空間:using System.IO;
背景:一個窗體、一個pictureBox、一個lable[沒有選擇圖片,lable的text為"圖片未選擇"],在pictureBox1的Click事件中添加如下代碼:
復制代碼代碼如下:
private void pictureBox1_Click(object sender, EventArgs e)
{
//實例化一個打開文件對話框
OpenFileDialog op = new OpenFileDialog();
//設置文件的類型
op.Filter = "JPG圖片|*.jpg|GIF圖片|*.gif";
//如果用戶點擊了打開按鈕、選擇了正確的圖片路徑則進行如下操作:
if(op.ShowDialog()==DialogResult.OK)
{
//清空文本
this.label1.Text = "";
//實例化一個文件流
FileStream fs = new FileStream(op.FileName, FileMode.Open);
//把文件讀取到位元組數組
byte[] data = new byte[fs.Length];
fs.Read(data, 0, data.Length);
fs.Close();
//實例化一個內存流--->把從文件流中讀取的內容[位元組數組]放到內存流中去
MemoryStream ms = new MemoryStream(data);
//設置圖片框 pictureBox1中的圖片
this.pictureBox1.Image = Image.FromStream(ms);
}
}
⑶ 如何用C語言讀寫文件
c語言讀寫文件程序:
#include "stdio.h"
#include <stdlib.h>
main()
{
FILE *fp1;//定義文件流指針,用於打開讀取的文件
FILE *fp2;//定義文件流指針,用於打開寫操作的文件
char text[1024];//定義一個字元串數組,用於存儲讀取的字元
fp1 = fopen("d:\a.txt","r");//只讀方式打開文件a.txt
fp2 = fopen("d:\b.txt","w");//寫方式打開文件a.txt
while(fgets(text,1024,fp1)!=NULL)//逐行讀取fp1所指向文件中的內容到text中
{
puts(text);//輸出到屏幕
fputs(text,fp2);//將內容寫到fp2所指向文件中
}
fclose(fp1);//關閉文件a.txt,有打開就要有關閉
fclose(fp2);//關閉文件b.txt
}
C語言文件讀寫操作總結
一.非標准文件的讀寫 不帶緩沖的
1.文件的打開和關閉
open()函數的作用是打開文件,其調用格式為: int open(char *filename, int access); 該函數表示按access的要求打開名為filename的文件,返回值為文件描述字,其中access有兩部分內容: 基本模式和修飾符, 兩者用" "("或")方式連接,修飾符可以有多個, 但基本模式只能有一個。
access的規定
O_RDONLY 只讀
O_APPEND 文件指針指向末尾
O_WRONLY 只寫
O_CREAT 文件不存在時創建文件, 屬性按基本模式屬性
O_RDWR 讀寫
O_BINARY 打開一個二進制文件
O_TEXT 打開一個文字文件
open()函數打開成功, 返回值就是文件描述字的值(非負值), 否則返回-1。 close()函數的作用是關閉由open()函數打開的文件, 其調用格式為: int close(int handle); 該函數關閉文件描述字handle相連的文件。
2.讀寫函數
int read(int handle, void *buf, int count);
read()函數從handle(文件描述字)相連的文件中, 讀取count個位元組放到buf所指的緩沖區中, 返回值為實際所讀位元組數, 返回-1表示出錯。返回0 表示文件結束。
write()函數的調用格式為: int write(int handle, void *buf, int count); write()函數把count個位元組從buf指向的緩沖區寫入與handle相連的文件中, 返回值為實際寫入的位元組數。
3.隨機定位函數
lseek()函數的調用格式為: int lseek(int handle, long offset, int fromwhere);
該函數對與handle相連的文件位置指針進行定位,功能和用法與fseek()函數相同。 tell()函數的調用格式為: long tell(int handle); 該函數返回與handle相連的文件現生位置指針, 功能和用法與ftell()相同
二、標准文件的讀寫
1.文件的打開函數fopen()
文件的打開操作表示將給用戶指定的文件在內存分配一個FILE結構區,並將該結構的指針返回給用戶程序,以後用戶程序就可用此FILE指針來實現對指定文件的存取操作了。
當使用打開函數時,必須給出文件名、文件操作方式(讀、寫或讀寫),如果該文件名不存在,就意味著建立(只對寫文件而言,對讀文件則出錯),並將文件指針指向文件開頭。若已有一個同名文件存在,則刪除該文件,若無同名文件,則建立該文件,並將文件指針指向文件開頭。
fopen(char *filename,char *type);
其中*filename是要打開文件的文件名指針,一般用雙引號括起來的文件名表示,也可使用雙反斜杠隔開的路徑名。
而*type參數表示了對打開文件的操作方式。其可採用的操作方式如下:
"r" 打開,只讀; "w" 打開,文件指針指到頭,只寫; "a" 打開,指向文件尾,在已存在文件中追加; "rb" 打開一個二進制文件,只讀; "wb" 打開一個二進制文件,只寫; "ab" 打開一個二進制文件,進行追加 ;
"r+" 以讀/寫方式打開一個已存在的文件; "w+" 以讀/寫方式建立一個新的文本文件 ;"a+" 以讀/寫方式打開一個文件文件進行追加 ;"rb+" 以讀/寫方式打開一個二進制文件; "wb+" 以讀/寫方式建立一個新的二進制文件 ;
"ab+" 以讀/寫方式打開一個二進制文件進行追加 ;當用fopen()成功的打開一個文件時,該函數將返回一個FILE指針,如果文件打開失敗,將返回一個NULL指針。