如何追加到文件?

发布于 2024-11-27 07:42:48 字数 357 浏览 0 评论 0原文

我正在尝试将一些文本附加到 Mac OSX 中具有 .conf 扩展名的文件末尾。我使用以下代码来执行此操作:

open NEW , ">>$self->{natConf}";
print NEW "$hostPort = $vmIP";

其中

$self->{natConf} = \Library\Preferences\VMware Fusion\vmnet8\nat.conf

所以基本上这是一个 .conf 文件。尽管它没有返回任何错误,但它没有将任何内容附加到文件末尾。我检查了所有权限,已经提供了读写权限。我在这里缺少什么吗?

I am trying to append some text to the end of a file in Mac OSX having a .conf extension. I am using the following code to do that:

open NEW , ">>$self->{natConf}";
print NEW "$hostPort = $vmIP";

where

$self->{natConf} = \Library\Preferences\VMware Fusion\vmnet8\nat.conf

So basically this is a .conf file. And even though its not returning any error, but it is not appending anything to the end of the file. I checked all the permissions, and read-write privilege has been provided. Is there anything I am missing here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深居我梦 2024-12-04 07:42:48

首先使用严格使用警告。这会给您的代码引发错误和警告。

在 Mac OS 上,路径中的分隔符是 /,就像其他类 UNIX 系统中的那样,而不是 \
要将字符串分配给变量,请使用引号。
不要使用 open(2) 而是使用 open(3) (无论如何,箭头运算符在 open 的使用中不起作用),并且使用裸字文件处理程序被认为是不好的做法。

use strict;
use warnings;

# your code here

$self->{natConf} = '/Library/Preferences/VMware Fusion/vmnet8/nat.conf';

# more code here

open my $fh, '>>', $self->{natConf} or die "open failed: $!\n";
print $fh "$hostPort = $vmIP";
close $fh;

# rest of code here

First of all use strict and use warnings. This would have thrown errors and warnings for your code.

On Mac OS the delimiter in a path is / like in other unix-like systems not \.
To asign a string to a variable use quotation marks.
Do not use open(2) but open(3) (the arrow operator does not work in your usage of open anyway) and it is considered bad practice to use bareword filehandlers.

use strict;
use warnings;

# your code here

$self->{natConf} = '/Library/Preferences/VMware Fusion/vmnet8/nat.conf';

# more code here

open my $fh, '>>', $self->{natConf} or die "open failed: $!\n";
print $fh "$hostPort = $vmIP";
close $fh;

# rest of code here
〆一缕阳光ご 2024-12-04 07:42:48

遭受缓冲之苦?写完后调用 close NEW,或者在打开它后调用 (*NEW)->autoflush(1) 以强制 Perl 刷新每次打印后输出。

另请检查 openprint 调用的返回值。如果这些函数中的任何一个失败,它们将返回 false 并设置 $! 变量。

我赞同关于使用严格警告的建议。

Suffering from buffering? Call close NEW when you are done writing to it, or call (*NEW)->autoflush(1) on it after you open it to force Perl to flush the output after every print.

Also check the return values of the open and print calls. If either of these functions fail, they will return false and set the $! variable.

And I second the recommendation about using strict and warnings.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文