Re: walk_dir() problem, please help debug
- Posted by Mike Nelson <MichaelANelson at WORLDNET.ATT.NET> Feb 02, 2002
- 458 views
Marcus, The problem seems to be that you aren't stripping the line terminator ('\n') from the lines you are reading from the file and this is messing up the library routines. I have also added code to eliminate blank lines. The corrected program: with trace trace(0) include file.e include get.e constant TRUE=1 sequence watchdirs sequence this_dir sequence subdir sequence path sequence topdir -- topdir ="" don't need this for the code here watchdirs = {} this_dir = "" path = "" subdir = "" -- Begin -- This function accepts two sequences as arguments function look_at(sequence path_name, sequence entry) printf (1, "Checking:%s\\%s\n", {path_name, entry[D_NAME]}) -- keep going return 0 end function -- Read watchdirs from text file into a sequence integer watchfile,len object line watchfile = open("watchit.txt","r") if watchfile = -1 then puts(1, "Couldn't open watchit.txt\n") abort(1) end if while 1 do line = gets(watchfile) if atom(line) then exit -- -1 is returned at end of file end if len=length(line) while len>0 do if not find(line[len],"\r\n") then exit end if len-=1 line=line[1..len] -- strip line teminators end while if len>0 then -- ignore empty lines watchdirs = append(watchdirs, line) end if end while close (watchfile) -- Print out watchdirs for i = 1 to length(watchdirs) do printf (1, "\n watchdir:%s\n", {watchdirs[i]}) end for -- Call routine to walk dir --- -- Copy watchdir[1], kept getting errors about sequences inside strings -- the copy step is not necessary -- if you need it for elsewhere in the program, use -- topdir=watchdirs[1] --for i = 1 to length(watchdirs[1]) do --topdir &= watchdirs[1][i] --end for --if walk_dir(topdir, routine_id("look_at"), TRUE) then for i=1 to length(watchdirs) do -- added, assuming the reason for gettting multiple directory names -- from the file is to watch them all. if walk_dir(watchdirs[i], routine_id("look_at"), TRUE) then end if end for -- Wait for key --- puts(1,"Press a key to continue.\n") integer key key = wait_key() -------------------------------------- -- Mike Nelson