V
vladimir.giron
I have a problem at writing multiple files. I have this code where I
write several XML files (the number of files it's dynamic). I use a
loop and in Linux works fine but the problem is Windows.
For example lets say that I want to write a long essay into 1 file,
Windows and Linux do it as it should be, the problem comes when I want
to write that same essay (divided into 5 parts) in 5 files. Linux works
fine but windows skips the first part (the first file is not written)
and the remaining parts are written well.. if I want to write the essay
into 10 files, the first three are not written and as the number of
files grows so does the number of files not written.
Does anyone knows why could this be? Next is the part of the code where
I write into the files.
local *FILE_X;
eval {
if(substr($filename, length($filename) - 4) eq '.txt')
{ #this does nothing yet }
else { my $success = open ::FILE, "> $filename";
unless($success) { $output->Error("Can not open file:
$filename");
return $False; }
print ::FILE $FILE_HEADER;
foreach my $line (@{$self->{_set}})
{ $line->WriteXML(*FILE_X{IO}); }
print ::FILE $FILE_FOOTER;
close ::FILE; } };
if($@) { $output->Fatal("Couldn't write out to file: $filename"); }
chmod(0644, $filename);
sub WriteXML {
my($self, $file) = @_;
if(!$self->{loc}){
return;
}
my $out = $XML_PREFIX;
foreach my $attribute (@__slots__){
my $value = $self->{$attribute};
if($value) {
if(Encode::is_utf8($value)) {
$value = $encoder->NarrowText($value, undef);
}
#Escape characters
$value =~ s/&/&/g;
$value =~ s/'/'/g;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$out .= " <$attribute>$value</$attribute>\n";
}
}
$out = $out . $XML_SUFFIX;
if(0) {
#nothing yet
}
else {
print ::FILE $out;
}
}
write several XML files (the number of files it's dynamic). I use a
loop and in Linux works fine but the problem is Windows.
For example lets say that I want to write a long essay into 1 file,
Windows and Linux do it as it should be, the problem comes when I want
to write that same essay (divided into 5 parts) in 5 files. Linux works
fine but windows skips the first part (the first file is not written)
and the remaining parts are written well.. if I want to write the essay
into 10 files, the first three are not written and as the number of
files grows so does the number of files not written.
Does anyone knows why could this be? Next is the part of the code where
I write into the files.
local *FILE_X;
eval {
if(substr($filename, length($filename) - 4) eq '.txt')
{ #this does nothing yet }
else { my $success = open ::FILE, "> $filename";
unless($success) { $output->Error("Can not open file:
$filename");
return $False; }
print ::FILE $FILE_HEADER;
foreach my $line (@{$self->{_set}})
{ $line->WriteXML(*FILE_X{IO}); }
print ::FILE $FILE_FOOTER;
close ::FILE; } };
if($@) { $output->Fatal("Couldn't write out to file: $filename"); }
chmod(0644, $filename);
sub WriteXML {
my($self, $file) = @_;
if(!$self->{loc}){
return;
}
my $out = $XML_PREFIX;
foreach my $attribute (@__slots__){
my $value = $self->{$attribute};
if($value) {
if(Encode::is_utf8($value)) {
$value = $encoder->NarrowText($value, undef);
}
#Escape characters
$value =~ s/&/&/g;
$value =~ s/'/'/g;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$out .= " <$attribute>$value</$attribute>\n";
}
}
$out = $out . $XML_SUFFIX;
if(0) {
#nothing yet
}
else {
print ::FILE $out;
}
}