Difference between forward slash (/) and backslash (\) in file path

c# path filepath backslash slash

49752 просмотра

7 ответа

1966 Репутация автора

I was wondering about the difference between \ and / in file paths. I have noticed that sometimes a path contains /and sometimes it is with \.

It would be great if anyone can explain when to use \ and /.

Автор: Spider man Источник Размещён: 18.07.2016 04:22

Ответы (7)


5 плюса

3434 Репутация автора

\ is used for Windows local file paths and network paths as in:

C:\Windows\Temp\ or \\NetworkSharedDisk\Documents\Archive\

/ is what is required by standard URIs as in:

http://www.stackoverflow.com/

Автор: Ash Размещён: 18.07.2016 04:29

9 плюса

91 Репутация автора

On Unix-based systems \ is an escape character, that is, \ tells the parser that this is a space and not the end of the statement. On Unix systems / is the directory separator.

On Windows \ is the directory separator, but the / cannot be used in file or directory names.

Автор: CountryRabbit Размещён: 18.07.2016 04:36

8 плюса

2248 Репутация автора

  • A URL, standardized in RFC 1738, always uses forward slashes, regardless of platform.
  • A file path and a URI are different. \ is correct in a Windows file path and / is correct in a URI.
  • Several browsers (namely, Firefox & Opera) fail catastrophically when encountering URIs with backslashes.
  • System.IO.Path.DirectorySeparatorChar to get current path separator

This can be relevant resource.

Автор: Sami Размещён: 18.07.2016 04:37

238 плюса

4922 Репутация автора

Решение

/ is the path separator on Unix and Unix-like systems. Modern Windows can generally use both \ and / interchangeably for filepaths, but Microsoft has advocated for the use of \ as the path separator for decades.

This is done for historical reasons that date as far back as the 1970s, predating Windows by over a decade. In the beginning, MS-DOS (the foundation to early Windows) didn't support directories. Unix had directory support using the / character since the beginning. However, when directories were added in MS-DOS 2.0, Microsoft and IBM were already using the / character for command switches, and because of DOS's lightweight parser (descended from QDOS, designed to run on lower end hardware), they couldn't find a feasible way to use the / character without breaking compatibility with their existing applications.

So, to avoid errors about "missing a switch" or "invalid switch" when passing filepaths as arguments to commands such as these:

cd/                        <---- no switch specified
dir folder1/folder2        <---- /folder2 is not a switch for dir

it was decided that the \ character would be used instead, so you could write those commands like this

cd\
dir folder1\folder2

without error.

Later, Microsoft and IBM collaborated on an operating system unrelated to DOS called OS/2. OS/2 had the ability to use both separators, probably to attract more Unix developers. When Microsoft and IBM parted ways in 1990, Microsoft took what code they had and created Windows NT, on which all modern versions of Windows are based, carrying this separator agnosticism with it.


As backward compatibility has been the name of the game for Microsoft from all of the major OS transitions that they've undertaken (DOS to Win16/DOS, to Win16/Win32, to Win32/WinNT), this peculiarity stuck, and it will probably exist for a while yet.

It's for this reason that this discrepancy exists. It should really have no effect on what you're doing because, like I said, the WinAPI can generally use them interchangeably. However, 3rd party applications will probably break if you pass a / when they expect a \ between directory names. If you're using Windows, stick with \. If you're using Unix or URIs (which have their foundation in Unix paths, but that's another story entirely), then use /.


In the context of C#: It should be noted, since this is technically a C# question, that if you want to write more "portable" C# code that works on both Unix and Windows (even if C# is predominantly a Windows language), you might want to use the Path.DirectorySeparatorChar field so your code uses the preferred separator on that system, and use Path.Combine() to append paths properly.

Автор: PC Luddite Размещён: 18.07.2016 05:02

20 плюса

3094 Репутация автора

MS-DOS 1.0 retained the command line option (or switch) character convention of '/' from CP/M. At that time there was no directory structure in the file system and no conflict.

When Microsoft developed the more Unix like environment with MS-DOS (and PC-DOS) 2.0, they needed to represent the path separator using something that did not conflict with existing command line options. Internally, the system works equally well with either '/' or '\'. The command processor (and many applications) continued to use the '/' as a switch character.

A CONFIG.SYS entry SWITCHAR=- could be used to override the / default to improve Unix compatibility. This makes built in commands and standard utilities use the alternate character. The Unix path separator could then be unambiguously used for file and directory names. This entry was removed in later versions, but a DOS call was documented to set the value after booting.

This was little used and most third-party tools remained unchanged. The confusion persists. Many ports of Unix tools retain the '-' switch character while some support both conventions.

The follow-on PowerShell command processor implements rigorous escaping and switch parameters and largely avoids the confusion except where legacy tools are used.

Neither the question nor the answer relate to C#.

Автор: Pekka Размещён: 18.07.2016 11:07

7 плюса

3569 Репутация автора

Apart from the answers given, it is worth mentioning that \ is widely used for special characters (such as \n \t) in programming languages, text editors and general systems that apply lexical analysis.

If you are programming for instance, it is inconvenient at times to need to even need to escape backslash with another one (\\) in order to use it properly - or need to use escaping strings, such as C# @"\test".

Of course, as mentioned before, web URIs use forward slash by standard but both slashes work in the latest and most common command line tools.

UPDATE: After searching a little bit, it seems out the whole story between / and \ goes back in "computer history", in the ages of DOS and the Unix-based systems at that time. HowToGeek has an interesting article about this story.

In short terms, DOS 1.0 was initially released by IBM with no directory support, and / was used for another ("switching") command functionality. When directories were introduced in 2.0 version, / was already in use, so IBM chose the visually closest symbol, which was \. On the other hand, Unix standardly used / for directories.

When users started to use many different systems, they started becoming confused, making the OS developers to attempt making the systems work in both cases - this even applies in the part of URLs, as some browsers support the http:\\www.test.com\go format. This had drawbacks though in general, but the whole thing stands today still for backward compartibility causes, with an attempt for support of both slashes on Windows, even though they are not based on DOS anymore.

Автор: Nick Louloudakis Размещён: 18.07.2016 03:09

6 плюса

5610 Репутация автора

You shouldn't be using either in C#. You should always use the Path class. This contains a method called Path.Combine that can be used to create paths without specifying the separator yourself.

Example usage:

string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
Автор: TheLethalCoder Размещён: 19.07.2016 09:46
Вопросы из категории :
32x32