hur.cn - 华软网

 热门搜索

关于WriteFile返回的实际写了多少字节,对于本地文件来说有必要判断吗?

  作者:未知    来源:网络    更新时间:2011/8/12
WriteFile函数,参数中有两个,
  DWORD nNumberOfBytesToWrite,
  LPDWORD lpNumberOfBytesWritten,
一个是指定写多少个字节,一个是返回实际写了多少个字节

如果是对于本地文件,nNumberOfBytesToWrite<64K的情况下,有必要判断"实际写入值"是否等于"要写入值"吗?
---华软 网友回答---
加个前提,WriteFile返回成功
---华软网友回复---
有必要啊
有什么疑问?
---华软网友回复---
我觉得如果对本地文件写,写入尺寸不大,这两个值永远相等。
---华软网友回复---
我觉得有必要的,既然API这么定义了返回结果,那么就按照它约定的方法来使用。
---华软网友回复---
我觉得这个参数在你取消IO时很有用,因为你中途取消不用这个参数就不知道写入了多少字节。。
---华软网友回复---
返回成功就没有必要了
引用 1 楼 xinyi 的回复:
加个前提,WriteFile返回成功

---华软网友回复---
存在即合理~
---华软网友回复---
当然,本地磁盘也是要通过通讯线写的,和远程本质是没区别的
远程只不过多了一道传输的通讯

---华软网友回复---
但是,不管中间转几道,核对的意义就是不允许任何一道有问题

那怕只有一道,比如你还钱,为怕对方赖帐,也要确认一下的
---华软网友回复---
极端点儿的,fat32文件大小最大不能超过4G(不确定还是2G,但肯定有个限制,NTFS现在的硬盘总容量还达不到它的限制),快到4G的写入就只能部分写入了
---华软网友回复---
俺对于这种操作不判断,但是应该判断。

---华软网友回复---
需要判断。比如一个有2M剩余空间的优盘上面,你打算写入2.5M数据,这时候就需要判断了。
---华软网友回复---
引用 4 楼 dream238 的回复:
我觉得有必要的,既然API这么定义了返回结果,那么就按照它约定的方法来使用。


WriteFile用于很多IO,可能对其它的有用,对本机文件没用。
---华软网友回复---
引用 12 楼 lisunlin0 的回复:
需要判断。比如一个有2M剩余空间的优盘上面,你打算写入2.5M数据,这时候就需要判断了。


这种情况,函数返回成功还是失败?
---华软网友回复---
引用 12 楼 lisunlin0 的回复:
需要判断。比如一个有2M剩余空间的优盘上面,你打算写入2.5M数据,这时候就需要判断了。


我试过了,空间不足函数会直接返回FALSE
---华软网友回复---
MSDN 中关于写文件的例子,它也没有测试实际写了多少个字节。

C++">
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>

#define TEST_STR "This is a test string"

HANDLE hFile; 

void __cdecl _tmain(int argc, TCHAR *argv[])
{
    DWORD dwResult;

    printf("\n");
    if( argc != 2 )
    {
        printf("ERROR:\tIncorrect number of arguments\n\n");
        printf("%s <file_name>\n", argv[0]);
        return;
    }

    hFile = CreateFile(argv[1],                // name of the write
                       GENERIC_WRITE,          // open for writing
                       0,                      // do not share
                       NULL,                   // default security
                       CREATE_ALWAYS,          // overwrite existing
                       FILE_ATTRIBUTE_NORMAL,  // normal file
                       NULL);                  // no attr. template

    if (hFile == INVALID_HANDLE_VALUE) 
    { 
        printf("Could not open file (error %d)\n", GetLastError());
        return;
    }

    if(!WriteFile (hFile, TEST_STR, strlen(TEST_STR), &dwResult, NULL))
    {
        printf("Could not write to file (error %d)\n", GetLastError());
        return;
    }
    printf("Wrote to file successfully.\n");
}



---华软网友回复---
引用 16 楼 luuillu 的回复:
MSDN 中关于写文件的例子,它也没有测试实际写了多少个字节。


C/C++ code

#include <Windows.h>
#include <tchar.h>
#include <stdio.h>

#define TEST_STR "This is a test string"

HANDLE hFile; 

void __cdecl _tmain(int……
这个……









---华软网友回复---
判断一下 还是有用的,既然api都这么说了
---华软网友回复---
多一个判断就是浪费效率,如果真的没必要,就考虑不判断      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。