"Gigs_" <[EMAIL PROTECTED]> escribió en el mensaje news:[EMAIL PROTECTED] Gabriel Genellina wrote: > En Thu, 01 Feb 2007 21:33:03 -0300, Gigs_ <[EMAIL PROTECTED]> escribió: > >> class CVisitor(FileVisitor): >> def __init__(self, fromdir, todir): >> self.fromdirLen = len(fromdir) + 1 # here is my problem >> self.todir = todir >> FileVisitor.__init__(self, fromdir) >> def visitdir(self, dirpath): >> topath = os.path.join(self.todir, dirpath[self.fromdirLen:]) >> os.mkdir(topath) >> def visitfile(self, filepath): >> topath = os.path.join(self.todir, filepath[self.fromdirLen:]) >> cpfile(filepath, topath) #copy contents from filepath to >> topath[/code] >> >> >> When I copy contents from C:\IronPython to C:\temp >> its all goes fine when self.fromdirLen = len(fromdir) + 1 is like this >> self.fromdirLen = len(fromdir) + 1 >> but when I change self.fromdirLen = len(fromdir) + 1 to self.fromdirLen >> = len(fromdir) i get contents copied to C:\ (actually to parent dir) > > Instead of actually doing os.mkdir and cpfile, use a print statement to > output the involved variables, and try with and without +1. You'll see > yourself what happens. > > well I have tried with print but can't figure out > I got this when I have removed + 1 > >>> C = CpallVisitor('C:\\New', 'c:\\temp') > >>> C.run(startdir='C:\\New') > c:\temp\ > filepath: C:\New\AUTOEXEC.BAT Topath: \AUTOEXEC.BAT > filepath: C:\New\boot.ini Topath: \boot.ini > filepath: C:\New\CONFIG.SYS Topath: \CONFIG.SYS
So it's clear that you need the +1 for the program to work properly, ok? > In python shell I got same thing, no matter fromdirLen is > len(fromdir) + 1 or len(fromdir) > >>> fromdir = 'C:\\New' > >>> fromdirLen = len(fromdir) > >>> todir = 'C:\\temp' > >>> topath = os.path.join(todir, fromdir[fromdirLen:]) > >>> topath > 'C:\\temp\\' This is *not* what your program does; the original code above has another variable, filepath. > Please help I assume that you're doing this as some kind of learning exercise - else there are other simpler ways. And you want to know why do you need that +1. Because it's clear that using +1 is the right answer, ok? You'll have to understand it yourself. Try running the program step by step. Hints: - compare os.path.join("c:\\temp", "AUTOEXEC.BAT") with os.path.join("c:\\temp", "\\AUTOEXEC.BAT") with os.path.join("c:\\temp\\", "AUTOEXEC.BAT") with os.path.join("c:\\temp\\", "\\AUTOEXEC.BAT") - remember that len("\\") == 1 - compare c:\temp c:\temp\AUTOEXEC.BAT and see where the filename part begins and what your program is doing with this. -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list