简体   繁体   中英

What is the difference between Environment.CurrentDirectory and Directory.GetCurrentDirectory?

In .NET what is the difference between:

  • Environment.CurrentDirectory
  • Directory.GetCurrentDirectory() ?

Of course, Environment.CurrentDirectory is a property which can be set and obtained.

Are there any other differences?

As David says: they do the same thing. Internally, when getting Environment.CurrentDirectory it will call Directory.GetCurrentDirectory and when setting Environment.CurrentDirectory it will call Directory.SetCurrentDirectory .

Just pick a favorite and go with it.

As per other answers, there is no difference - the implemenetation of Environment.CurrentDirectory delegates to the Get and Set methods in Directory .

There's an interesting stylistic API-design question that that raises - why did the designers of Environment feel that a regular property was appropriate, whereas the designers of Directory preferred explicit Get and Set methods?

The Framework Design Guidelines book has a fair amount to say about choosing properties versus methods, some of which is available online . The most relevant parts seem to me to be (with my emphases):

A rule of thumb is that methods should represent actions and properties should represent data. Properties are preferred over methods if everything else is equal

...

  • CONSIDER using a property, if the member represents a logical attribute of the type

...

  • DO use a method, rather than a property, in the following situations:
    • The operation is orders of magnitude slower than a field access would be

All things considered my opinion is that explicit Get and Set methods better represent what is going on here.

不,没有其他差异。

Directory.SetCurrentDirectory throws no fewer than 7 exceptions, so checking up on all the things that could go wrong could be time-consuming. The method therefore presumably complies with

"DO use a method, rather than a property, in the following situations:

The operation is orders of magnitude slower than a field access would be"

Even GetCurrentDirectory has 2 potential exceptions. Across a network and/or with a large number of subdirectories to navigate these could potentially take seconds instead of milliseconds in the worst case.

public static string GetCurrentDirectory (); https://referencesource.microsoft.com/#mscorlib/system/io/directory.cs,4de7d0d0c291277b

public static string CurrentDirectory { get; set; } public static string CurrentDirectory { get; set; } https://referencesource.microsoft.com/#mscorlib/system/environment.cs,b64586ead0df012b

Although the Environment.CurrentDirectory called Directory.GetCurrentDirectory , I still prefer to use Environment.CurrentDirectory , since it's a static property, can response faster.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM