Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: Re: chdir does not work on win2000

by juo (Curate)
on May 28, 2001 at 20:19 UTC ( #83749=note: print w/replies, xml ) Need Help??

in reply to Re: chdir does not work on win2000
in thread chdir does not work on win2000

It works with that function but not in combination with the native windows 2000 browser : getOpenFile Regards, Pieter

Replies are listed 'Best First'.
Re: Re: Re: chdir does not work on win2000
by juo (Curate) on May 28, 2001 at 20:32 UTC

    Here comes a standalone sample of the windows 2000 native browser. You will need the Tk module. You will notice the chdir in their and it doesn't produce any error but it also does not change the directory. It always goes back to the last directory browsed too. says Simply use your question

    #!/perl/bin/perl -w # always with warnings on.. use Tk 800.000; use strict; use vars qw/$edaType/; use FileHandle; my $edaType = "Visula"; use Cwd; cadFileSelect(); sub cadFileSelect { my $edaType = shift; my $cadFile = shift; my $TOP = MainWindow->new; $TOP->title("Select a file"); $TOP->geometry("+50+100"); $TOP->configure(-background => lc("aquamarine2")); my $tFrame = $TOP->Frame; my $bFrame = $TOP->Frame; $tFrame->configure(-background => lc("PaleTurquoise")); $bFrame->configure(-background => lc("PaleTurquoise")); my $lab = $tFrame->Label(-text => "Select a file to open: ", -background => "PaleTurquoise", -anchor => 'e'); my $ent = $tFrame->Entry(-width => 50, -textvariable => \$$cadFile, -background => "PaleTurquoise",); my $but = $tFrame->Button(-text => "Browse ...", -background => "PaleTurquoise", -activebackground => "PaleTurquoise", -command => sub { $$cadFile = fileDialog($edaType,$TOP); }); my $quitButton = $bFrame->Button(-text => "Quit", -width => 12, -background => "PaleTurquoise", -activebackground => "PaleTurquoise", -command => sub { $TOP->destroy; # strictly not necessary Tk::exit; }); my $continueButton = $bFrame->Button(-text => "Continue", -width => 12, -background => "PaleTurquoise", -activebackground => "PaleTurquoise", -command => sub { if($$cadFile) { $TOP->destroy; } else { my $ch = $TOP->messageBox('-icon' => 'info', -type => 'OK', -title => 'Information', -message => "Please select $edaTyp +e input file"); } }); Tk::grid($tFrame, -row => 0, -column => 0, -sticky => 'w', -padx => 10, -pady => 10, ); Tk::grid($bFrame, -row => 1, -column => 0, -sticky => 's', -padx => 10, -pady => 10, ); Tk::grid($quitButton, -row => 0, -column => 0, -sticky => 'w', -padx => 10, -pady => 10, ); Tk::grid($continueButton, -row => 0, -column => 1, -sticky => 'w', -padx => 10, -pady => 10, ); Tk::grid($lab, -row => 1, -column => 0, -sticky => 'w', -padx => 10, -pady => 10, ); Tk::grid($ent, -row => 1, -column => 1, -sticky => 'w', -padx => 10, -pady => 10, ); Tk::grid($but, -row => 1, -column => 2, -sticky => 'w', -padx => 10, -pady => 10, ); MainLoop; } sub fileDialog { # # note now receiving more args... # my ($textWidget, $w, $mainWin) = @_; my @types = setFileTypes($edaType); my $file = undef; # Loop until valid selection is made, or user hits "Cancel" while(not defined($file)) { my $_pwd = getcwd(); chdir("c:\\tmp") or print STDERR "\n\tERROR in chdir: $!\n"; $file = $w->getOpenFile(-filetypes => \@types); if(defined($file) && $file ne '') { return $file; chdir($_pwd); #back to orig dir } else { my $ch = $w->messageBox('-icon' => 'error', -type => 'OKCancel', -title => 'Message', -message => "Please select a $edaType input file") +; if($ch eq "cancel") { $w->destroy; chdir($_pwd); #back to orig dir return $ch; } } } return $file; } sub setFileTypes { my $edaType = shift; return (["Visula Cadif file", '*'], ["Visula Cadif file", 'cadif.file'] ) if($edaType eq "Visula"); # ..........etc. # ...and in case something is very wrong, and edatype doesn't match... return undef; }
      The first time that I ran this, I received an error message when I hit the browse button, "ERROR in chdir: No such file or directory" .. this is because by default it looks like it is hitting "c:\\tmp" - I changed this to "c:\\temp", tried again, and did not receive the error. While browsing I can navigate to different folders etc no problem and see all of their contents. To me that sounds like it is working.

      This isn't a problem with chdir, it appears to be a problem specific to directory named "tmp". If I try to chdir to a directory that doesn't exist, then the "Browse" button shows me files in the working directory of the script. If I successfully chdir, then it shows me files in that directory. But on both of those cases, if the directory name is "tmp", then I am instead shown files in the "My Documents" folder. Sounds like just the kind of thing Microsoft would do.

      An aside: If you cancel out of the Browse window, you get a two-button dialog box that either throws you back into the Browse window or exits the program. You really should allow the user to cancel the Browse window and return to the original form in case they change their mind about browsing.

              - tye (but my friends call me "Tye")

        Dear Tye, Are you using Win2000. With me it doesn't change the directory on Windows2000. When the browser open it shows me the directory last browsed too and not the directory that is returned by cwd(). The directory that is returned by cwd() is the directory were I started the script from. When I use chdir that directory has been changed but the directory in the browser stays untouched. When I browse to another location in the browser and I exit the browser that location is now stored and shown everytime I open the browser even when I reboot. It's that pointer I am not able to change. I believe it must be somewhere a setting in the windows2000 register that is not correct. On Windows NT it is working fine. Did anybody had simular problems ?

        my $_pwd = getcwd(); print "$_pwd\n"; # shows c:/perl/training : directory were I start + from. chdir("c:\\public") or print STDERR "\n\tERROR in chdir: $!\n"; $_pwd = getcwd(); print "$_pwd\n"; # shows c:/perl/public: directory have been chang +ed

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://83749]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2018-04-26 16:28 GMT
Find Nodes?
    Voting Booth?