#include <windows.h>
#include <stdio.h>
#include <shlwapi.h> #pragma comment(lib,"shlwapi.lib") int myRemoveDirectory(char *szPath)
{
if(!PathIsDirectory(szPath))
{
return GetLastError();
}
BOOL bRes = SetCurrentDirectory(szPath);
if(!bRes)
{
return GetLastError();
}
char * buf =(char *)malloc(MAX_PATH);
ZeroMemory(buf,sizeof(buf)); strcpy(buf,szPath); PathAddBackslash(buf); strcat(buf,"*.*"); WIN32_FIND_DATA findData = {0};
HANDLE hFile = FindFirstFile(buf,&findData);
int nRes = DeleteFile(findData.cFileName);
while(FindNextFile(hFile,&findData))
{
DeleteFile(findData.cFileName);
}
SetCurrentDirectory("D:\\");
FindClose(hFile);
if(!RemoveDirectory(szPath))
{
int nRes = GetLastError();
return nRes;
}
return 0;
} char * MyCreateFile()
{
HANDLE hFile = NULL;
char * cPath = "d:\\temp________111111111111";
if(!myRemoveDirectory(cPath))
{ }
BOOL bRes = CreateDirectory(cPath,NULL);
int nRes = GetLastError();
if(!bRes)
{
MessageBox(NULL,"Failed to create files","Alert",MB_OK);
return NULL;
}
bRes = SetCurrentDirectory(cPath);
char * pszFilePath = (char *)malloc(1024);
strcpy(pszFilePath,cPath);
PathAppend(pszFilePath,"text.txt");
hFile = CreateFile(pszFilePath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == NULL)
{
return NULL;
}
int i,j;
char *buff = (char *)malloc(1024);
char * mallocHeap = buff; // 记录新创建的地址。
if(hFile == INVALID_HANDLE_VALUE)
{
return NULL;
}
DWORD nBytes = 0;
char temp[MAX_PATH]={0};
ZeroMemory(buff,1024);
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)
{
sprintf(temp,"%d*%d = %d \t",j,i,i*j); //改变temp的指向,temp 不在指向原先的内存地址。
strcat(buff,temp);
}
strcat(buff,"\r\n");
WriteFile(hFile,buff,strlen(buff)+1,&nBytes,NULL);
ZeroMemory(buff,1024);
} CloseHandle(hFile);
free(mallocHeap); return pszFilePath; }
int MyReadFile()
{
char * pszFilePath = MyCreateFile(); HANDLE hFile = CreateFile(pszFilePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == NULL)
{
return 0;
}
char *buf = (char * )malloc(1024*1024);
char * mallocHeap = buf;
ZeroMemory(buf,sizeof(buf));
DWORD nBytes = 0;
ReadFile(hFile,buf,1024,&nBytes,NULL);
if(nBytes < 1024 )
{
while(nBytes)
{
printf("%s",buf);
int nTemp = strlen(buf);
buf = buf + nTemp +1;
nBytes = nBytes- nTemp-1;
}
}
else
{
while(nBytes)
{ printf("%s",buf);
ZeroMemory(buf,sizeof(buf));
ReadFile(hFile,buf,1024,&nBytes,NULL);
} }
CloseHandle(hFile);
free(mallocHeap);
return 1;
}
int main()
{
if(MyReadFile())
{
MessageBox(NULL,"Success","Success",MB_OK);
}
getchar();
getchar();
return 0;
}

  


总结:
 
free 只能释放malloc alloc 创建的堆指针,改变无效。
findfirstfile 实在一对文件中寻找文件,而不是在一个文件夹里寻找文件。
也就是说 findfirstfile(d:\\*.*) 是可以找到目录下面的文件的。
大师 findfirstfile(d:\\) 不行。
wirtefile 当第四个参数为null的时候 第三个参数不允许为null

一次练习 发现的问题,malloc free 无效;findfirstfile失败,writefile失败的原因的更多相关文章

  1. 早期malloc分配时,如果内存耗尽分配不出来,会直接返回NULL。现在分配不出来,直接抛出异常(可使用nothrow关键字)

    今天和同事review代码时,发现这样的一段代码: Manager * pManager = new Manager(); if(NULL == pManager) { //记录日志 return f ...

  2. malloc实现原理

    记得早一段时间,看到一本书上写过delete的一个..今天突然找啦一下资料: malloc()是C语言中动态存储管理 的一组标准库函数之中的一个.其作用是在内存的动态存储区中分配一个长度为size的连 ...

  3. 最小重组缓冲区和路径MTU发现

    概括: 主要来源于unp,可参考:http://blog.csdn.net/ysu108/article/details/7764461 疑惑: 1. 最小重组缓冲区大小: ipv4为576,ipv6 ...

  4. malloc函数分配内存失败的常见原因

    malloc()函数分配内存失败的常见原因:  1. 内存不足.  2. 在前面的程序中出现了内存的越界访问,导致malloc()分配函数所涉及的一些信息被破坏.下次再使用malloc()函数申请内存 ...

  5. C++异常处理

    引言 异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题.而传统错误处理技术,检查到一个局部无法处理的问题时: 1.终止程序(例如atol,atoi ...

  6. Linux Programe/Dynamic Shared Library Entry/Exit Point && Glibc Entry Point/Function

    目录 . 引言 . C/C++运行库 . 静态Glibc && 可执行文件 入口/终止函数 . 动态Glibc && 可执行文件 入口/终止函数 . 静态Glibc & ...

  7. C输入输出函数与缓冲区

    #转 对C语言输入输出流和缓冲区的深入理解C语言缓冲区(缓存)详解缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的 ...

  8. Java编程思想读书笔记

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. CPPUTest 单元测试框架(针对 C 单元测试的使用说明)

    CPPUTest 虽然名称上看起来是 C++ 的单元测试框架, 其实它也是支持测试 C 代码的. 本文主要介绍用CPPUTest来测试 C 代码. (C++没用过, 平时主要用的是C) C++相关的内 ...

随机推荐

  1. English trip EM2-LP-6A Teacher:Julia

    课上内容(Lesson) How many children are in the family? there are 16 kids How old is the oldest child? He' ...

  2. LeetCode--026--删除排序数组中的重复项

    问题描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  3. ASP.NET发送电子邮件(转)

    原始地址:http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html(有代码下载,博主真是有操守) 1.补充知识 (1)POP ...

  4. Alyona and a tree CodeForces - 739B (线段树合并)

    大意: 给定有根树, 每个点$x$有权值$a_x$, 对于每个点$x$, 求出$x$子树内所有点$y$, 需要满足$dist(x,y)<=a_y$. 刚开始想错了, 直接打线段树合并了..... ...

  5. python获取文件路径、文件名、后缀名的实例

    def jwkj_get_filePath_fileName_fileExt(filename): (filepath,tempfilename) = os.path.split(filename); ...

  6. 基于jquery实现页面loading加载效果

    实现loading 加载提示 ······ 透明遮罩 居中效果 具体代码如下: CSS样式部分: <style type="text/css"> .background ...

  7. vue路由守卫应用,监听是否登录

    路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navigation-guards). 导航守卫 ...

  8. 二十五、过滤器Filter,监听器Listener,拦截器Interceptor的区别

    1.Servlet:运行在服务器上可以动态生成web页面.servlet的声明周期从被装入到web服务器内存,到服务器关闭结束.一般启动web服务器时会加载servelt的实例进行装入,然后初始化工作 ...

  9. iOS block 机制

    本文要将block的以下机制,并配合具体代码详细描述: block 与 外部变量 block 的存储域:栈块.堆块.全局块 定义 块与函数类似,只不过是直接定义在另一个函数里,和定义它的那个函数共享同 ...

  10. iOS架构设计系列之解耦的尝试之变异的MVVM

    最近一段时间,在思考如何合理的架构一个可扩展性良好的界面编程方式.这一部分的成果做成了一个叫ElementKit的库.目前功能在不断的完善中. 关于iOS的架构,看多了MVVM,VIPER,MVC,M ...