[Mono-bugs] [Bug 78209][Nor] New - Directory.GetParent(path) fails
for path=file in the current directory (doesn't fail on MS)
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Wed Apr 26 10:13:46 EDT 2006
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by dredconrad at gmail.com.
http://bugzilla.ximian.com/show_bug.cgi?id=78209
--- shadow/78209 2006-04-26 10:13:46.000000000 -0400
+++ shadow/78209.tmp.11387 2006-04-26 10:13:46.000000000 -0400
@@ -0,0 +1,82 @@
+Bug#: 78209
+Product: Mono: Class Libraries
+Version: 1.1
+OS: All
+OS Details:
+Status: NEW
+Resolution:
+Severity:
+Priority: Normal
+Component: CORLIB
+AssignedTo: mono-bugs at ximian.com
+ReportedBy: dredconrad at gmail.com
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL:
+Summary: Directory.GetParent(path) fails for path=file in the current directory (doesn't fail on MS)
+
+Description of Problem:
+
+Directory.GetParent(path) fails for path=file in the current directory
+(doesn't fail on MS). This is because GetParent is implemented with
+Path.GetDirectoryName, which returns "" in such a case and this gets passed
+to new DirectoryInfo(""), which bombs (as it should). The fix is to make a
+special case in GetParent for files in the current directory... see
+attached diff.
+
+Steps to reproduce the problem, here's a test case:
+
+using System;
+using System.IO;
+
+public class Test
+{
+ public static void Main(String[] args)
+ {
+ if(args.Length < 1)
+ Console.WriteLine("one argument (filename) required");
+
+ Console.WriteLine("parent directory is " +
+Directory.GetParent(args[0]).FullName);
+ }
+}
+
+Actual Results:
+
+Unhandled Exception: System.ArgumentException: path
+Parameter name: Empty path.
+in <0x0003e> System.IO.FileSystemInfo:CheckPath (System.String path)
+in <0x0001b> System.IO.DirectoryInfo:.ctor (System.String path)
+in (wrapper remoting-invoke-with-check) System.IO.DirectoryInfo:.ctor (string)
+in <0x00096> System.IO.Directory:GetParent (System.String path)
+in <0x00034> Test:Main (System.String[] args)
+
+Expected Results: The current directory name should be returned.
+
+How often does this happen? Always.
+
+Here's the diff for mcs/class/corlib/System.IO/Directory.cs:
+
+Index: mcs/class/corlib/System.IO/Directory.cs
+===================================================================
+--- mcs/class/corlib/System.IO/Directory.cs (revision 59863)
++++ mcs/class/corlib/System.IO/Directory.cs (working copy)
+@@ -299,7 +299,13 @@
+ if (IsRootDirectory (path))
+ return null;
+
+- return new DirectoryInfo (Path.GetDirectoryName
+(path));
++ // get directory name for path
++ string dir = Path.GetDirectoryName(path);
++
++ if(dir == String.Empty) // i.e., no directory
+information, file in current directory
++ return new DirectoryInfo
+(GetCurrentDirectory());
++ else
++ return new DirectoryInfo
+(Path.GetDirectoryName (path));
+ }
+
+ public static void Move (string src, string dest)
More information about the mono-bugs
mailing list