标签: fwrite

检查C中的fwrite是否成功,perror

使用fwrite返回写入文件的成功元素的数量,通过说:

if (!(fwrite(...))) {
    fprintf(stderr, "Failure");
    //perror(???)  I sometimes see code that says perror here and I don't know 
    //exactly what this does.
}
Run Code Online (Sandbox Code Playgroud)

这是否检查成功写入文件?还有其他需要担心的事情吗?

谢谢.

c fwrite

10
推荐指数
1
解决办法
2万
查看次数

将Json对象导出到文本文件

我正在尝试编写一个Json对象(JsonExport),我想将其内容写入文本文件.

我正在使用max4live将数据从Audio DAW导出到Json以便导出到服务器,但之后我想在文本文件中看到整个Json对象:

 var txtFile = "test.txt";
 var file = new File(txtFile);
 var str = JSON.stringify(JsonExport);


 file.open("write"); // open file with write access
 file.write(str);
 file.close();
Run Code Online (Sandbox Code Playgroud)

编译器运行时没有错误,但我无法获取文本文件.我已经使用了一些我的目录,没有任何东西.

知道发生了什么事吗?谢谢

javascript json fwrite

10
推荐指数
3
解决办法
4万
查看次数

在Windows中fwrite比WriteFile快吗?

我一直认为WriteFile比fwrite更有效,因为fwrite在内部调用WriteFile,但是下面的测试代码告诉我fwrite比WriteFile更快.

写入成本为2毫秒,而WriteFile需要27000(FILE_ATTRIBUTE_NORMAL),每次写入调用后都会刷新.如果我用FILE_FLAG_WRITE_THROUGH调用WriteFile,并注释FlushFileBuffers(wfile)行,WriteFile会更快,成本为800.

那真的是fwrite调用WriteFile吗?是什么让这么大的差异?fwrite如何在内部工作?如何使用API​​比fwrite更有效地将数据写入文件?(unbufferd,synchronous).

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

   int main() {
     FILE* cfile = fopen("file1.txt", "w");
     HANDLE wfile = CreateFile("file2.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 
           /*FILE_ATTRIBUTE_NORMAL*/FILE_FLAG_WRITE_THROUGH, NULL);
     DWORD written = 0;

     DWORD start_time, end_time;
     char * text = "test message ha ha ha ha";
     int size = strlen(text);
     int times = 999;

     start_time = timeGetTime();
     for(int i = 0; i < times; ++i) {
       fwrite(text, 1, size, cfile);
       fflush(cfile);
     }
     end_time = timeGetTime();
     std::cout << end_time - start_time << '\n'; …
Run Code Online (Sandbox Code Playgroud)

c++ performance file-io winapi fwrite

9
推荐指数
2
解决办法
8613
查看次数

FILE结尾*指针不等于写入数据的大小

非常简单地说,我有以下代码片段:

FILE* test = fopen("C:\\core.u", "w");
printf("Filepointer at: %d\n", ftell(test));
fwrite(data, size, 1, test);
printf("Written: %d bytes.\n", size);
fseek(test, 0, SEEK_END);
printf("Filepointer is now at %d.\n", ftell(test));
fclose(test);
Run Code Online (Sandbox Code Playgroud)

它输出:

Filepointer at: 0
Written: 73105 bytes.
Filepointer is now at 74160.
Run Code Online (Sandbox Code Playgroud)

这是为什么?为什么写入的字节数与文件指针不匹配?

c fopen fwrite ftell

8
推荐指数
1
解决办法
3277
查看次数

了解fwrite()的缓冲行为

我正在使用函数调用fwrite()将数据写入Linux上的管道.

早些时候,fwrite()反复调用小块数据(平均20个字节)并留下缓冲fwrite().过程表明,一次写入4096字节的数据.

原来,这个写作过程是我程序的瓶颈.所以我决定将我的代码中的数据缓冲到64KB的块中,然后一次写入整个块fwrite().我曾经setvbuf()将FILE*指针设置为'No Buffering'.

性能提升并不像我预期的那么重要.

更重要的是,strace输出显示数据仍然一次写入4096个字节.有人可以向我解释一下这种行为吗?如果我fwrite()使用64KB数据调用,为什么一次只写4096个字节?

是否有fwrite()使用FILE*指针将数据写入管道的替代方法?

c c++ linux fwrite

8
推荐指数
1
解决办法
2224
查看次数

在python中将ASCII字符串写为二进制

我有一个ASCII字符串="abcdefghijk".我想用python将它写成二进制格式的二进制文件.

我试过以下:

str  = "abcdefghijk"
fp = file("test.bin", "wb")
hexStr = "".join( (("\\x%s") % (x.encode("hex"))) for x in str)
fp.write(hexStr)
fp.close()
Run Code Online (Sandbox Code Playgroud)

但是,当我打开test.bin时,我看到以ascii格式而不是二进制格式.

\x61\x62\x63\x64\x65\x66\x67
Run Code Online (Sandbox Code Playgroud)

我理解它是因为这里有两个斜杠("\\ x%s").我该如何解决这个问题?提前致谢.

更新:

以下给出了预期的结果:

file = open("test.bin", "wb")
file.write("\x61\x62\x63\x64\x65\x66\x67")
file.close() 
Run Code Online (Sandbox Code Playgroud)

但是如何使用"abcdef"ASCII字符串实现此目的.?

python binary file fwrite

8
推荐指数
1
解决办法
2万
查看次数

golang中的磁盘写性能

在下面的代码中,我使用golang中的bufio将消息写入文件.我的磁盘I/O速度约为1000M/s.奇怪的是,当写入文件的大小小于20G时,写入速度约为每秒800M~900M,略低于I/O速度.但是,当文件大小超过21G时,我发现写入速度大约是每秒200M,远低于I/O速度.我不知道为什么,任何人都可以帮助我?谢谢.

package main

import "fmt"
import (
    "os"
    "time"
    "flag"
    "bufio"
)

func main() {
    var pRound = flag.Int64("round", 3500000, "loop round")
    flag.Parse()

    var message string
    for i := 0; i < 1024; i++ {
        message += "1234567890"
    }
    message += "\n"

    f, err := os.OpenFile("server", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
    if err != nil {
        fmt.Println(err)
        return
    }
    w := bufio.NewWriter(f)

    var i int64 = 0
    round := *pRound
    start := time.Now()
    for i = 0; i < round; i++ {
        w.WriteString(message) …
Run Code Online (Sandbox Code Playgroud)

io performance file fwrite go

8
推荐指数
2
解决办法
2687
查看次数

C fread()神奇地读取动态分配的struct成员,怎么样?

这是我为一个我正在研究的大型项目编写的测试程序.它与使用fwrite()将struct数据写入磁盘然后用fread()读取该数据有关.结构的一个成员是动态分配的.

首先,这是我的代码

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

#define STRING_LEN  128

struct Person {
    int age;
    char *name;
};

int main(int argc, const char *argv[])
{
    struct Person *person = calloc(1, sizeof(struct Person));
    person->age = 22;
    person->name = calloc(STRING_LEN, sizeof(char));

    char *name = "Name that is really, really, really, really, really, really, long.";
    strncpy(person->name, name, STRING_LEN);

    FILE *out_file = fopen("rw.out", "w");
    fwrite(person, sizeof(struct Person), 1, out_file);
    fclose(out_file);

    FILE *in_file = fopen("rw.out", "r");
    struct Person *person_read = calloc(1, sizeof(struct Person));
    fread(person_read, …
Run Code Online (Sandbox Code Playgroud)

c struct fwrite fread

7
推荐指数
2
解决办法
2127
查看次数

有没有办法从Python编写格式化文本?

如果您使用python写入文件,是否有任何方法可以使文本的某些部分变为粗体,斜体或下划线?

我试过了:

test = '/location/tester.rtf'
out_file = open(test,'w')
out_file.write('is this {\bold}?')
out_file.close() #thanks to the comment below
Run Code Online (Sandbox Code Playgroud)

是否可以通过python编写格式化的文本,如粗体,斜体或带下划线的文本?我觉得.rtf是最基本的格式化文本,但如果我错了,请纠正我

python format text fwrite

7
推荐指数
1
解决办法
2万
查看次数

Linux和Windows之间fwrite的不同行为

我有一个用C编写的小示例程序.我有一个main函数writeFile,它调用一个函数在二进制文件中写入一些数字.然后我调用overwrite0替换为0,最后打印结果.

这是代码:

#include <stdio.h>

/* Print the content of the file */
void printFile(){
    printf("Read test.dat:\n");
    int r;
    FILE* fp = fopen("test.dat", "rb+");
    if(fp) {
    while(fread(&r,sizeof(int),1,fp)){
            printf("%d\n", r);
        }
    }
    fclose(fp);
}

/* Replace 0 with 1 */
void overwrite(){
    int   r;
    FILE *fp = fopen("test.dat", "rb+");
    if (fp) {
        int i=0;
        while (i < 4 && fread(&r, sizeof(int), 1, fp)) {
            i++;
            if (r == 0) {
                r = 1;
                fseek(fp,-sizeof(int),SEEK_CUR);
                fwrite(&r,sizeof(int),1,fp);
            }
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c linux windows fwrite

7
推荐指数
1
解决办法
991
查看次数

标签 统计

fwrite ×10

c ×5

c++ ×2

file ×2

linux ×2

performance ×2

python ×2

binary ×1

file-io ×1

fopen ×1

format ×1

fread ×1

ftell ×1

go ×1

io ×1

javascript ×1

json ×1

struct ×1

text ×1

winapi ×1

windows ×1