您的位置:首页 > 其它

Windows程序设计零基础自学_14_Windows文件和目录操作

2012-03-03 01:31 344 查看
  如果说计算机系统中有一个具有代表性的概念,那么就是文件了。从虚拟和广义的角度上讲Unix将系统的各种资源都看做文件;同样

目前蒸蒸日上的Linux系统也将系统中的各种资源看做文件,而占有PC机霸主地位的Win平台也将系统资源看做文件。

1、文件的概念

  文件: 存储在外存储设备上的一段数据的集合,这段数据用一个文件名标示符标志。例如C语言源代码在各种平台下都存储为一块

ASCII码的数据集合。

在Windows下,系统不但将通常意义下的“文件”看做文件;而且将磁盘设备、通信资源、命名管道、控制台输入和输出等均看做文件。

从虚拟或者广义的角度上来看,系统是由文件构成的。(CPU也可以看成是“文件”的一种)。

  win32 API文件操作函数给应用程序提供了一整套的操作各种类型文件的接口,通过这些接口可以方便的访问文件。

2、 创建和打开文件

  Win32中使用CreateFile函数来创建和打开所有类型的文件;应用程序可以通过设置不同的模式来从文件中读入、写入

或者读写文件中的内容。还可以指定是否可以共享文件,以读取、写入或者读写文件。

  通过CreateFile函数操作文件的时候,会返回一个文件句柄“HFILE”;

CreateFile函数的原型是:

  HANDLE CreateFile( LPCTSTR lpFileName, //文件名,通常包含路径

DWORD dwDesiredAccess, //访问文件的存取模式

DWORD dwShareMode, //共享的模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指定文件的安全属性

DWORD dwCreationDisposition, //创建文件的模式

DWORD dwFlagstaffAndAttributes,// 指定新建文件的属性和标志

HANDLE hTemplateFile //指向一个具有GENERIC_READ属性的文件句柄,该文件为要创建的文件

//提供文件属性和文件扩展属性

);

Exp_1:

__________________________________________________

  typedef HANDLE HFILE;

  HFILE hFile;

hFile=CreateFile(L"createfile.txt",

GENERIC_READ |GENRIC_WRITE,

FILE_SHARE_READ,

NULL,

OPEN_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

NULL

);

___________________________________________________

  windows为创建或者打开的文件指定一个文件句柄,应用程序如果需要读写文件,需要给读写文件的API函数提供这个文件句柄hFile;

在使用hFile之前通常建议检查其有效性,就像Exp_2;当文件读写完毕建议使用CloseHandle函数关闭打开的文件,这将关闭文件并且

刷新缓冲区。

  应用程序可以打开用于控制台输入和输出的文件句柄,当应用程序把“CONIN$”传递给CreateFile时则打开的文件用于控制台输入;而

将“CONOUT$”传递给CreateFile时,则打开的文件用于输出。 这样就会返回标准输入、输出设备的文件句柄;可以通过SetStdHandle函

数重定向标准输入和输出句柄。 可以使用GetStdHandle函数来检索标准输入、输出和错误处理程序。这些函数允许应用程序使用标准文件

句柄和重定向标准输入输出文件。

Exp_2:

  if(hFile != INVALID_FILE_VALUE)

{

//这里对文件进行读写操作

......

//操作完后关闭文件

     CloseHandle(hFile);

}

_________________________________________________________________

Exp_3: 调用Win32对标准输入和输出进行操作

HFILE hFileStdIn;

   char StdInBuf[128];

   DWORD dwRead;

   dwRead=0;

hFileStdIn=CreateFile("CONIN$",

GENERIC_READ,

0,

NULL,

               OPEN_EXISTING,

FILE_ATTRIBUTE_READ,

NULL

);

if(hFileStdIn != FILE_INVALID_VALUE)

{

       SetFilePointer(hFileStdIn,0,0,FILE_BEGIN);

ReadFile(hFileStdIn,StdInBuf,1,&dwRead,NULL); //从标准输入读取一个字符,相当于getc

StdInBuf[dwRead]='\0';

CloseFile(hFileStdIn);

}

  如果查看CRuntime库,那么可以发现getc这样的输入和输出函数,是通过调用系统的API实现输入和输出的。

3、文件指针

  当某个文件在应用程序里面被第一次打开时,Windows在文件的起始位置设定一个文件指针。文件指针指示下一次读、写

操作的位置,随着文件的读取和写入,widnows将动态调整这个文件指针,应用程序也可以用SetFilePointer函数来移动文件指

针指向的位置。

应用程序通过调用Win32函数ReadFile和WriteFile来对文件进行读、写操作;这些函数的操作在文件指针指示的位置处进行读

、写给定数量的字节数,但是不对数据进行格式化。

ReadFile见Exp_3;

SetFilePointer见Exp_3;

Exp_4:

------------------------------------------------------------------------------------------------

HFILE hFileStdOut;

   char StdOutBuf[128]=“Hello word!”;

unsigend int StrLen;

   DWORD dwWrite;

   dwWrite=0;

StrLen=strlen(StdOutBuf);

hFileStdOut=CreateFile("CONout$",

GENERIC_WRITE,

0,

NULL,

               OPEN_EXISTING,

FILE_ATTRIBUTE_WRITE,

NULL

);

if(hFileStdIn != FILE_INVALID_VALUE)

{

       SetFilePointer(hFileStdOut,0,0,FILE_BEGIN); //实际上如果是第一打开的话,可以不进行定位

WriteFile(hFileStdIn,StdOutBuf,StrLen,&dwWrite,NULL);

CloseFile(hFileStdOut);

}

4、锁定文件和解锁文件

  在Windows平台下可能同时又两个应用程序打开一个文件,这时为了防止两个应用程序对同一个文件的同一个区域进行

读写,可以使用LockFile函数进行文件锁定,以防止文件被多应用程序修改。

  对文件的访问结束后,可以通过UnlockFile函数对锁定的文件进行解锁。

              
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: