使用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)
这是否检查成功写入文件?还有其他需要担心的事情吗?
谢谢.
我正在尝试编写一个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)
编译器运行时没有错误,但我无法获取文本文件.我已经使用了一些我的目录,没有任何东西.
知道发生了什么事吗?谢谢
我一直认为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) 非常简单地说,我有以下代码片段:
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)
这是为什么?为什么写入的字节数与文件指针不匹配?
我正在使用函数调用fwrite()将数据写入Linux上的管道.
早些时候,fwrite()反复调用小块数据(平均20个字节)并留下缓冲fwrite().过程表明,一次写入4096字节的数据.
原来,这个写作过程是我程序的瓶颈.所以我决定将我的代码中的数据缓冲到64KB的块中,然后一次写入整个块fwrite().我曾经setvbuf()将FILE*指针设置为'No Buffering'.
性能提升并不像我预期的那么重要.
更重要的是,strace输出显示数据仍然一次写入4096个字节.有人可以向我解释一下这种行为吗?如果我fwrite()使用64KB数据调用,为什么一次只写4096个字节?
是否有fwrite()使用FILE*指针将数据写入管道的替代方法?
我有一个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字符串实现此目的.?
在下面的代码中,我使用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) 这是我为一个我正在研究的大型项目编写的测试程序.它与使用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) 如果您使用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是最基本的格式化文本,但如果我错了,请纠正我
我有一个用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)