2013-12-20 4 views
0

일부 데이터를 파일에 저장하려고하는데 파일이 잘못된 디렉토리에 저장되었습니다.저장된 파일에 슬래시가 포함되어 있습니다.

using (StreamWriter sw = new StreamWriter(dir + "\\temp" + x + ".txt")) 
    sw.Write(data); 

Windows의 경우에는 정상적으로 작동합니다. 그러나 리눅스에서 우분투를 실행할 때 (Mono에서는 우분투가 중요하지 않다고 생각합니다.), 내 파일 이름에 백 슬래시가 저장됩니다.

Path.Combine(dir, "temp" + x + ".txt");과 슬래시를 사용하려고했습니다. 일하지 않았어.

누구든지 의견이 있습니까?

편집 : 위에서 언급 한 솔루션을 "시도하는"것이 좋지 않았 음을 나타냅니다. MonoDevelop가 실제로 동일한 작업을 수행했는지 여부를 확인하지 않은 응용 프로그램을 실행할 때마다 Visual Studio를 다시 컴파일하는 데 너무 익숙했습니다.

변경하고 다시 작성한 후에 대답에서 제공된 세 가지 솔루션이 모두 작동하는 것으로 나타났습니다.

답변

3

하드 코딩 \ 대신 Path.DirectorySeparatorChar을 사용하십시오. 이것은 적절한 플랫폼에서 올바른 슬래시로 확장됩니다.

2

백 슬래시를 전혀 사용하지 마십시오. 대신 슬래시를 사용하십시오. 유닉스에서 작동하며 DOS 및 Windows의 모든 버전 - 예도 다시 DOS 2.0

에 먼저 파일을 만들기 전에

중간 디렉토리의 모든 만들기

을 추가했습니다. Path.Combine 자주 유용하지만 코드가 쉽기 때문에 내가 대를 (1 개 문자를 읽고 텍스트 문자열에 직접 경로 문자열을 사용하고 때

ADDED 학자 연하는 호언 장담은

, 나는 대부분 하드 코딩 편의를 위해 대신 슬래시 많은) 그것은 항상 작동합니다. 이론적으로 .Net은 경로 분리 자로 슬래시를 허용하지 않는 무언가로 이식 될 수 있지만 파손 정도는 매우 심할 것입니다. 그 플랫폼에서 .Net 프레임 워크가 내부적으로 경로 분리자를 변환 할 것으로 기대합니다.

+0

먼저 중간 디렉터리 만들기. –

+0

호언 장담도 추가되었습니다. –

2

NET Framework는 경로를 처리 할 수있는 많은 도구를 제공합니다. 경로 클래스에서 시작

using (StreamWriter sw = new StreamWriter(Path.Combine(dir, "temp", x + ".txt")) 
    sw.Write(data); 

없음 슬래시 또는 백 슬래시

SIDE 참고 : 현재 운영 체제에 대한 올바른 경로에 결합하는 3 개 문자열 인수를 받아들이며 Path.Combine 방법은 이후 NET.4.0에서 사용할 수

관련 문제