當前位置:首頁 » 編程語言 » c語言對文件進行打開
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言對文件進行打開

發布時間: 2022-07-22 17:27:31

『壹』 c語言中為什麼要對文件進行打開和關閉

要區分內存和硬碟,文件是存儲在硬碟上的,而你的程序是運行在內存中的。當你想訪問一個文件的內容的時候,需要把該文件相應的句柄和頭部信息放到內存中。打開操作相當於建立了一個與硬碟之間的通道,以便你進行讀取和寫入;而所謂的讀取就是把文件內容拷貝至內存的過程,寫入則是把更改後的內容存儲到硬碟的過程(當然不是直接寫,而是先在內存中完成)。當完成讀寫操作後,會把更新後的文件寫回硬碟,進行關閉操作,把這個通道關閉掉。

『貳』 c語言如何打開文件

你只要把下面代碼的file_path改成你要輸出的文件就可以了。注意,一般window下的文件路徑都是一個反斜杠,但是在file_name的字元串中,所有的反斜杠都寫成兩個反斜杠。比如
E:\abc\WTK\SW\source.txt
你要寫成
E:\\abc\\WTK\\SW\\source.txt

#include <stdio.h>
#include <string.h>

main()
{
FILE *fp;
char ch;
char *file_path = "C:\\test\\myfile.txt";

if((fp=fopen(file_path,"r"))==NULL)
{
printf("\nSorry, Can't open the file! @_@\n");
exit(0);
}
else
{
while((ch=fgetc(fp))!=EOF)
{ printf("%c",ch); }
fclose(fp);
}

getch();
}
是否可以解決您的問題?

『叄』 C語言怎樣打開文件呀

這不就是我回答的嘛,可以試一下把file1.txt加上全路徑名,比如在d盤根目錄下的話死後,用"d:\\file1.txt"代替"file1.txt"

『肆』 如何使用c語言打開一個文件

用fopen函數啊

『伍』 C語言中的打開文件

C語言中,文件FILE的概念:此前,我們所熟悉的輸入與輸出都只是涉及到鍵盤及顯示器,但是完全不夠;這時,解決的辦法是:將這些需要記錄的數據,記錄到某些介質上,利用介質的存儲特性,攜帶或永久保存數據,這些記錄在外部介質上的數據的集合稱為「文件」;
按照數據在介質上的存放方式,分為文本文件和二進制文件;
打開及關閉文件舉例:
fopen(文件名,文件使用方式)
fclose(文件指針)

『陸』 C語言怎麼打開文件

獲取當前程序所在路徑:
一、1.只獲得路徑字串不包含文件名
TCHAR
szFilePath[MAX_PATH
+
1]={0};
GetMoleFileName(NULL,
szFilePath,
MAX_PATH);
(_tcsrchr(szFilePath,
_T('\\')))[1]
=
0;//刪除文件名,只獲得路徑字串
CString
str_url
=
szFilePath;
//例如str_url==e:\program\Debug\---------------------------------------------------------2.獲得雙斜杠路徑不包含文件名TCHAR
_szPath[MAX_PATH
+
1]={0}; GetMoleFileName(NULL,
_szPath,
MAX_PATH); (_tcsrchr(_szPath,
_T('\\')))[1]
=
0;//刪除文件名,只獲得路徑
字串 CString
strPath; for
(int
n=0;_szPath[n];n++){if
(_szPath[n]!=_T('\\')){
strPath
+=_szPath[n]
;} else{
strPath
+=
_T("\\\\");}}MessageBox(strPath);//輸出==e:\\program\\Debug\\二、1:獲取應用程序自身完整路徑文件名方法1:#include
"stdlib.h"void
main(){cout
<<
_pgmptr
<<
endl;}方法2:char
szFullPath[MAX_PATH];ZeroMemory(szFullPath,MAX_PAT);::GetMoleFileName(NULL,szFullPath,MAX_PATH);::MessageBox(NULL,szFullPath,"path",MB_ICONINFORMATION);方法3:TCHAR
szPath[MAX_PATH]
=
{0};if(!GetMoleFileName(NULL,
szPath,
MAX_PATH)){
return
;
} AfxMessageBox(szPath);2:如何獲取應用程序所在目錄?這里值得注意的是很多人都用GetCurrentDirectory(MAX_PATH,
szCurrentPath);來獲取。這個方法並不好,經常出錯,比如現在我有一個程序在d:\test目錄下,現在運行這個程序後用GetCurrentDirectory得到的是d:\test。接著在程序里用CFileDialog來打開一個C:\test\test.txt文件後再調用GetCurrentDirectory,那麼得到的szCurrentPath就是C:\test而不是d:\test。推薦用如下方法來得到當前程序所在目錄比較安全:void
_splitpath(
const
char
*path,
char
*drive,
char
*dir,
char
*fname,
char
*ext
);函數來分解開始提到的_pgmptr,然後再用void
_makepath(
char
*path,
const
char
*drive,
const
char
*dir,
const
char
*fname,
const
char
*ext
);函數來對分解後的路徑進行組合。這兩個函數結合起來功能強大,使用靈活,基本上所有的有關目錄和路徑方面的操作都可以搞定,就是麻煩。

『柒』 c語言如果要對一個文件進行訪問首先需要打開一個文件因此如果一個文件不存在c

咨詢記錄 · 回答於2021-12-26

『捌』 c語言 如何打開一個TXT文件。

C語言,打開文件一個TXT文件,需要使用fopen()函數。
它的函數原型位FILE
*
fopen(const
char
*
path,const
char
*
mode);
如果文件順利打開後,返回指向該流的文件指針就會。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。
一般而言,打開文件後會做一些文件讀取或寫入的動作,若打開文件失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()後作錯誤判斷及處理。
參數path字元串包含欲打開的文件路徑及文件名,參數mode字元串則代表著流形態。
mode有下列幾種形態字元串:
r
以只讀方式打開文件,該文件必須存在。
r+
以可讀寫方式打開文件,該文件必須存在。
rb+
讀寫打開一個二進制文件,允許讀寫數據,文件必須存在。
w
打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+
以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
(原來的EOF符不保留)
wb
只寫打開或新建一個二進制文件;只允許寫數據。
wb+
讀寫打開或建立一個二進制文件,允許讀和寫。
ab+
讀寫打開一個二進制文件,允許讀或在文件末追加數據。
wx
創建文本文件,只允許寫入數據.[C11]
wbx
創建一個二進制文件,只允許寫入數據.[C11]
w+x
創建一個文本文件,允許讀寫.[C11]
wb+x
創建一個二進制文件,允許讀寫.[C11]
w+bx
和"wb+x"相同[C11]
以x結尾的模式為獨占模式,文件已存在或者無法創建(一般是路徑不正確)都會導致fopen失敗.文件以操作系統支持的獨占模式打開
下面讀取TXT文件的行數並把把TXT文件的內容存到數組中。
這里假設每行是一個字元串,每行不超過127個字元(用數組存字元串,最後一位存'\0'),選取fgets進行讀取。
示例代碼如下:
#include
#include
int main(int argc, char* argv) {
FILE* rf = fopen("input.txt","r");
char a[1024][128];
int i=0;
while(fgets(a[i],128,rf))i++;
int n=i;
printf("行數:%d\n",n);
fclose(rf);
i=0;
while(i

『玖』 如何用c語言打開一個文件

近用c語言做文件操作比較頻繁,記幾個常用的操作

獲得文件大小:

fseek(fp, 0, SEEK_END);
int fileSize = ftell(fp);
rewind(fp);

讀取指定位置的數據塊:

fseek( fp,offset,SEEK_SET );
int num_read = fread(buf, 1, length, fp);

刪除文件

int res = access( filename,0 ); // 判斷文件是否存在
if ( res == 0 )
{
res = remove( filename );// 刪除文件
return ( res ==0 );
}

在指定位置寫入塊數據:

fseek( fp, offset, SEEK_SET );
num_write = fwrite( buf, 1, n, fp );

打開文件方式中有一個比較特別的,如果 某文件中已經有了一部分數據,你需要繼續在上面添加數據,但是是在指定位置添加,也就是說,仍然需要通過 fseek 找到寫入位置,然後再 fwrite,這時候需要以 "rb+" 方式打開。而不能以"a"或者"ab+"方式。以"a"方式打開,fseek函數不起作用。

獲得文件屬性

struct stat st;
FILE *fp = fopen( filename.c_str(),"rb" );
if ( !fp )
{ // error
}
fstat( fp->_file, &st );

遍歷目錄

std::string dirspec = dir + "\\*.*";
struct _finddata_t filefind;
int done = 0;
intptr_t handle = 0;

if( ( handle = _findfirst(dirspec.c_str(),&filefind) ) == -1 )
return IVS_FAIL;

IVS_RESULT res = IVS_OK, response =IVS_OK;
while( !(done=_findnext(handle,&filefind)) )
{
if( !strcmp(filefind.name,"..") || !strcmp(filefind.name,".") )
continue;

AdsFileInfo info;
if((_A_SUBDIR==filefind.attrib))
{
info._filename = filefind.name;
info._fileSize = filefind.size;
info._atime = filefind.time_access;
info._ctime = filefind.time_create;
info._mtime = filefind.time_write;
info._isdir = true;
}
else
{
std::string tmpFilename = dir + "\\";
tmpFilename += filefind.name;
res = getFileInfo( tmpFilename, info );
response = (!SUCCESS(res))?res: response;
}
list.push_back( info );
}
_findclose(handle);