标签: fwrite

fread 和 fwrite 结果文件大小不同

我正在 Visual Studio 中编写程序。\n我使用fread和复制了一个文件fwrite。\n输出文件大小比输入文件大。\n你能解释一下原因吗?

\n
#define _CRT_SECURE_NO_WARNINGS\n#include <stdio.h>\n#include <stdlib.h>\n#include <memory.h>\n\nint main()\n{\n    char *buffer;\n    int fsize;\n\n    FILE *fp = fopen("test.txt", "r");\n    FILE *ofp = fopen("out.txt", "w");\n    fseek(fp, 0, SEEK_END);\n    fsize = ftell(fp);\n\n    buffer = (char *)malloc(fsize);\n    memset(buffer, 0, fsize); // buffer\xeb\xa5\xbc 0\xec\x9c\xbc\xeb\xa1\x9c \xec\xb4\x88\xea\xb8\xb0\xed\x99\x94\n\n    fseek(fp, 0, SEEK_SET);\n    fread(buffer, fsize, 1, fp);\n\n    fwrite(buffer, fsize, 1, ofp);\n\n    fclose(fp);\n    fclose(ofp);\n    free(buffer);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

c filesize fwrite fread

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

使用fwrite/fread和数据结构的几个问题

我正在使用fwrite()并且fread()第一次将一些数据结构写入磁盘,我对最佳实践和正确的处理方式有几个问题.

我正在写入磁盘(所以我以后可以读回来)是在Graph结构中插入的所有用户配置文件.每个图形顶点都是以下类型:

typedef struct sUserProfile {
    char name[NAME_SZ];
    char address[ADDRESS_SZ];
    int socialNumber;
    char password[PASSWORD_SZ];

    HashTable *mailbox;
    short msgCount;
} UserProfile;
Run Code Online (Sandbox Code Playgroud)

这就是我目前正在将所有配置文件写入磁盘的方式:

void ioWriteNetworkState(SocialNetwork *social) {
    Vertex *currPtr = social->usersNetwork->vertices;
    UserProfile *user;

    FILE *fp = fopen("save/profiles.dat", "w");

    if(!fp) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }

    fwrite(&(social->usersCount), sizeof(int), 1, fp);

    while(currPtr) {
        user = (UserProfile*)currPtr->value;

        fwrite(&(user->socialNumber), sizeof(int), 1, fp);
        fwrite(user->name, sizeof(char)*strlen(user->name), 1, fp);
        fwrite(user->address, sizeof(char)*strlen(user->address), 1, fp);
        fwrite(user->password, sizeof(char)*strlen(user->password), 1, fp);
        fwrite(&(user->msgCount), sizeof(short), 1, fp);

        break;

        currPtr = currPtr->next;
    }

    fclose(fp); …
Run Code Online (Sandbox Code Playgroud)

c file-io fwrite fread data-structures

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

强制fwrite在PHP中使用\n而不是\ r \n

我正在Linux服务器上运行PHP,并且我正在生成bash脚本,以便在使用PHP的fopen/fwrite的Mac计算机上使用.它的工作正常,除了行结尾被写为\ r \n而不仅仅是\n,这会在我尝试在Mac上运行脚本时导致错误.

如何强制fwrite使用\n代替\ r \n进行行结尾?我已经尝试过utf8_encoding我的文本和强制二进制模式,但我似乎无法搞清楚!

   $scriptFile = "/path/to/my/script.sh";
   $fh = fopen($scriptFile, 'w');
   fwrite($fh, "$script");
   fclose($fh);
Run Code Online (Sandbox Code Playgroud)

$ script是mysql中文本字段的内容,看起来有点像这样,通常是:

   # comment
   echo "numphotos 1"

   # comment
   /opt/local/bin/gphoto2 --capture-image-and-download -F 1 

   # comment
   echo "696969"
Run Code Online (Sandbox Code Playgroud)

php linux fopen fwrite

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

在php上写文件

我想保留访问者的ips并将它们放在一个文件中.
我尝试了fwrite()函数,但我认为它是在previus ip on file上重写的.

例.

ip.txt是空的.

当我运行write.php脚本时,在ip.txt上我有xxxx ip(我的ip)

如果我的朋友运行write.php脚本,在ip.txt上我有aaaa ip(仅限朋友的ip)

我的IP在哪里?我想在ip.txt文件中有以下内容:

x.x.x.x   ip1  
a.a.a.a   ip2
Run Code Online (Sandbox Code Playgroud)

write.php上的代码如下.

<?php
$file = fopen("ip.txt","w");
$ip=$_SERVER['REMOTE_ADDR'];
echo fwrite($file,$ip);
fclose($file);
?> 
Run Code Online (Sandbox Code Playgroud)

php ip fwrite

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

使用fwrite在C中复制文件

我是C的新手,并且正在尝试编写一个程序来复制文件,以便我可以学习文件的基础知识.我的代码将文件作为输入,通过使用fseek和ftell从其末尾减去其开始来计算其长度.然后,它使用fwrite根据我从其手册页得到的内容,将一个数据元素(END - START)元素长写入OUT指向的流,从FI给出的位置获取它们.问题是,虽然它确实产生"复制输出",但文件与原始文件不同.我究竟做错了什么?我尝试将输入文件读入变量然后从那里写入,但这也没有帮助.我究竟做错了什么?谢谢

int main(int argc, char* argv[])
{ 
    FILE* fi = fopen(argv[1], "r"); //create the input file for reading

    if (fi == NULL)
        return 1; // check file exists

    int start = ftell(fi); // get file start address

    fseek(fi, 0, SEEK_END); // go to end of file

    int end = ftell(fi); // get file end address

    rewind(fi); // go back to file beginning

    FILE* out = fopen("copy output", "w"); // create the output file for writing

    fwrite(fi,end-start,1,out); // write …
Run Code Online (Sandbox Code Playgroud)

c file-io copy fwrite

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

使用php创建.xls文件

这就是我所拥有的:

   $sep = "\t";        //tabbed character
    $fp = fopen('registrars.xls', "w");

$schema_insert_rows = "";
//printing column names 

        $schema_insert_rows.="#" . $sep;
        $schema_insert_rows.="Registrar" . $sep;
        $schema_insert_rows.="Country" . $sep;
        $schema_insert_rows.="Website" . $sep;
        //$schema_insert_rows.="Postal Address" . $sep;
        //$schema_insert_rows.="Contact Number" . $sep;
        $schema_insert_rows.="Email Address" . $sep;

        $schema_insert_rows.="\n";
        fwrite($fp, $schema_insert_rows);

// printing data:
    $row = 0; $i = 0; $schema_insert_rows = "";

        $schema_insert_rows .= (++$row) . "" . $sep;
        $schema_insert_rows .= $registrarArr[$i] . "" . $sep;
        $schema_insert_rows .= $registrarArr[$i+1] . "" . $sep;
        $schema_insert_rows .= $linkArr[$i] . …
Run Code Online (Sandbox Code Playgroud)

php excel export fwrite

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

在Linux上使用fwrite作为原子进程

我正在开发Linux环境下的C代码.我fwrite用来写一些数据到一些文件.该计划将在经常断电(至少每天一次)的环境中运行.因此,我想fwrite确保在写入数据时发生断电时不应更新该文件.它应该只在fwrite完成其工作时保存文件.如何fwrite在文件完成写入过程后才能使用该效果?

编辑:我使用fopen wb来丢弃文件中的先前信息并编写一个新文件,例如

FILE *rtng_p;
rtng_p = fopen("/etc/routing_table", "wb");
fwrite(&user_list, sizeof(struct routing), 40, rtng_p);
Run Code Online (Sandbox Code Playgroud)

并且它是一些非常小的数据,一些字节长

c linux atomic fwrite

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

使用fread和fwrite

我正在努力学习如何使用fread和fwrite.在这里,我试图在标准输出上打印文件的内容.

#include <stdio.h>

int main()

{
FILE *fp; 
fp = fopen("largest.c", "r+");
int c = fwrite(fp, sizeof(fp), 1, stdout);

printf("Output is 1 if write succesful! : %d\n", c);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.在屏幕上显示一些乱码.为什么?

c fwrite

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

fclrite()在fclose()之后成功

我在fwrite()关闭流后遇到了一个奇怪的行为,fclose()但是文件没有被覆盖为fflush()失败.

我的代码是:

int main(int argc, char* argv[])
{
   FILE* file = fopen("file.txt", "w");
   if(!file) perror("Cannot open the file.\n");

    char text[] = "1234567";

    fclose(file);

    int count_of_written_objects = fwrite(text, sizeof(text),1, file);
    printf("Count of written objects into the file: %d \n", count_of_written_objects);

    if(count_of_written_objects != 1) perror("Not expected count of objects was written.\n");

    int success = fflush(file);
    printf("Variable success: %d \n", success);                                                                                                                
    if(success == EOF) perror("Flush did not succeed. \n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

Count of written objects …
Run Code Online (Sandbox Code Playgroud)

c fwrite fclose

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

C - 来自volatile源的fwrite()

我有一些协处理器可以修改的内存.我已将我的指针标记为volatile,但如果我将该内存用作fwrite中的源,我是否必须担心linux缓存(内核推迟复制,直到协处理器更改了该位置的数据)或其他任何内容?

例如:

volatile My_Data_t* samples;
fwrite((void *) samples, 4, 1, fp);
Run Code Online (Sandbox Code Playgroud)

c volatile fwrite

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

标签 统计

fwrite ×10

c ×7

php ×3

file-io ×2

fread ×2

linux ×2

atomic ×1

copy ×1

data-structures ×1

excel ×1

export ×1

fclose ×1

filesize ×1

fopen ×1

ip ×1

volatile ×1