2015-04-06 52 views
-1

我在Windows 7机器上安装了ActivePerl。一切都很好,但它无法从给定路径读取配置文件。我使用的代码是ActivePerl在Windows 7中的路径不起作用

use constant CONFIG_FNAME => '/windows/system32/softwareconfig.txt'; 
$self->{"config"} = &read_config_file($CONFIG_FNAME); 
warn "read_config_file(CONFIG_FNAME) returned undef" if !defined($self->{"config"}); 

它总是返回警告。如果我在同一个目录中使用softwareconfig.txt并且使用CONFIG_FNAME => 'softwareconfig.txt',则它可以工作。

此代码在Windows上完美运行  XP。我也试过下面的路径,但似乎没有工作。这些都可以在XP中使用Windows  。

CONFIG_FNAME => 'c:/windows/system32/softwareconfig.txt' 
CONFIG_FNAME => 'c:\\windows\system32\softwareconfig.txt' 
CONFIG_FNAME => 'c:\\windows\\system32\\softwareconfig.txt' 
CONFIG_FNAME => "c:\\windows\\system32\\softwareconfig.txt" 
CONFIG_FNAME => '\\windows\\system32\\softwareconfig.txt' 

可以做些什么来纠正?

+1

可以肯定的是,不需要在路径上使用反斜杠。只需使用正斜杠即可。 Perl会自动替换它。并且不需要在单引号字符串中转义反斜杠 – 2015-04-06 08:26:49

+0

双引号内的转义反斜杠。我输入了错误,并在原始问题中进行了更正。 – Prabhu 2015-04-06 09:32:36

+0

@hexerei软件,Perl不会执行任何替换。 Windows本身接受'\'和'/'作为路径分隔符。 – ikegami 2015-04-06 13:51:02

回答

3

你的问题可能与Perl无关。 Windows\system32是一个受保护的系统目录,Vista和更高版本对该位置有较好的保护。我不认为'softwareconfig.txt'是一个标准的Windows文件。如果您将自己的配置文件放入受保护的系统目录中,请停止执行此操作。

Environment::SpecialFolder Enumeration为您提供Windows上的特殊文件夹列表。

如果配置文件是针对特定用户的,则ApplicationData下的子目录是合适的。如果它适用于所有用户,则CommonApplicationData下的子目录是合适的。

+0

我将配置文件重新定位到现在正在工作的“d:\ softwareconfig.txt”。我认为这个问题是由于windows访问限制系统文件夹 – Prabhu 2015-04-06 11:09:44

+0

,你应该把文件放在你的用户目录中,或者在Sinan提出的应用程序数据目录中 – 2015-04-06 11:15:08

1

请在所有脚本的开头始终使用use strict;use warnings。它说:

变量 “$ CONFIG_FNAME” 是不是在test1.pl线进口7 (你的意思是& CONFIG_FNAME呢?)

两行必须是:

self->{"config"} = read_config_file(CONFIG_FNAME); 
warn "read_config_file(".CONFIG_FNAME.") returned undef" if !defined($self->{"config"}); 

常数是一个单词。常量不会在引号内插入。

+0

我删除&read_config_file前(),但问题依旧。完全相同的代码在activeperl 8.10的XP机器上工作正常。 – Prabhu 2015-04-06 09:30:20

+0

@Prabhu:奇怪,它工作正常,我。你在'CONFIG_FNAME'之前删除了'$'吗?可能'read_config_file'产生错误? – Toto 2015-04-06 10:06:05

+0

是,CONFIG_FNAME之前$是一个打字错误。我已经在我的问题中纠正了它 – Prabhu 2015-04-06 10:31:07

1

你的Perl代码似乎没问题。你可以使用一个正斜杠。 Perl会自动替换它。因此/windows/system32/softwareconfig.txt将工作,如果试图访问该文件的服务或程序具有从该路径读取的权限。

我的建议:尝试更改配置文件的权限以允许所有人使用。