node.js 打开文件覆盖现有文件
node.js open file overrides existing file
我正在用 c 语言创建一个文件,如下所示:
int fd;
fd = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
if (fd == -1) {
return NULL;
}
lseek(fd, filesize + 1, SEEK_SET);
write(fd, "", 1);
lseek(fd, 0, SEEK_SET);
void* file_memory = mmap(0, filesize, PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
因此,正如我所说,我创建文件并在将其映射到内存之前填充它。
当我查看文件系统中的文件时,它给出了 1026 字节的文件大小(来自文件的简单 ls -l)
稍后我想从节点应用程序访问文件,听起来很简单:
fs.open(filename, 'w', function (err, fd) { ... }
执行此行时,文件大小将设置为 0(同样是一个简单的 ls -l)。
我假设文件已经重新创建?但这不应该发生,因为该文件已经存在(根据 node.js 手册)。
这里发生了什么?我做错了什么?
当我使用 'w+' 标志时,它起作用了。
不知道为什么,因为'w+'表示可以读写文件,而'w'表示只能写文件。
fs.open(文件名, 'w', 函数 (err, fd) { ... }
编辑
来自 man fopen
w
将文件截断为 零 长度或创建用于写入的文本文件。流位于文件的开头。
w+
打开读写。如果文件不存在则创建该文件,否则将被截断。流位于文件的开头。
你是对的,w
标志重新创建了文件。如果要在文件末尾写入,请使用 a
(追加)标志。
我正在用 c 语言创建一个文件,如下所示:
int fd;
fd = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
if (fd == -1) {
return NULL;
}
lseek(fd, filesize + 1, SEEK_SET);
write(fd, "", 1);
lseek(fd, 0, SEEK_SET);
void* file_memory = mmap(0, filesize, PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
因此,正如我所说,我创建文件并在将其映射到内存之前填充它。
当我查看文件系统中的文件时,它给出了 1026 字节的文件大小(来自文件的简单 ls -l)
稍后我想从节点应用程序访问文件,听起来很简单:
fs.open(filename, 'w', function (err, fd) { ... }
执行此行时,文件大小将设置为 0(同样是一个简单的 ls -l)。
我假设文件已经重新创建?但这不应该发生,因为该文件已经存在(根据 node.js 手册)。
这里发生了什么?我做错了什么?
当我使用 'w+' 标志时,它起作用了。
不知道为什么,因为'w+'表示可以读写文件,而'w'表示只能写文件。
fs.open(文件名, 'w', 函数 (err, fd) { ... }
编辑
来自 man fopen
w
将文件截断为 零 长度或创建用于写入的文本文件。流位于文件的开头。
w+
打开读写。如果文件不存在则创建该文件,否则将被截断。流位于文件的开头。
你是对的,w
标志重新创建了文件。如果要在文件末尾写入,请使用 a
(追加)标志。