private static string NewGetCurrentDirectory() { using (StringBuffer buffer = new StringBuffer(PathInternal.MaxShortPath)) { uint result = 0; while ((result = Win32Native.GetCurrentDirectoryW(buffer.CharCapacity, buffer.GetHandle())) > buffer.CharCapacity) { // Reported size is greater than the buffer size. Increase the capacity. // The size returned includes the null only if more space is needed (this case). buffer.EnsureCharCapacity(result); } if (result == 0) __Error.WinIOError(); buffer.Length = result; #if !PLATFORM_UNIX if (buffer.Contains('~')) return LongPathHelper.GetLongPathName(buffer); #endif return buffer.ToString(); } }
/*===============================CurrentDirectory=============================== **Action: Provides a getter and setter for the current directory. The original ** current DirectoryInfo is the one from which the process was started. **Returns: The current DirectoryInfo (from the getter). Void from the setter. **Arguments: The current DirectoryInfo to which to switch to the setter. **Exceptions: ==============================================================================*/ public static String GetCurrentDirectory() { // Start with a buffer the size of MAX_PATH using (StringBuffer buffer = new StringBuffer(260)) { uint result = 0; while ((result = Win32Native.GetCurrentDirectoryW(buffer.CharCapacity, buffer.GetHandle())) > buffer.CharCapacity) { // Reported size is greater than the buffer size. Increase the capacity. // The size returned includes the null only if more space is needed (this case). buffer.EnsureCharCapacity(result); } if (result == 0) __Error.WinIOError(); buffer.Length = result; #if !PLATFORM_UNIX if (buffer.Contains('~')) return Path.GetFullPath(buffer.ToString()); #endif return buffer.ToString(); } }