2014-01-13 2 views
0

나는 filestream을 사용하여 텍스트 문서를 작성하고 있습니다. 문서가 잘못된 폴더로 전달된다는 점을 제외하면 모든 것이 제대로 작동하는 것 같습니다..txt 문서를 작성할 때 어떻게 폴더 위치로 경로를 변경합니까?

C:\Users\user2\Desktop\work\SuperBy\nop\NopCommerceStore\Administration\FedEx 

FedEx 폴더 관리 폴더에 존재 dosn't : 코드가 문서를 작성해야한다고 생각 어디

이다. 그러나 FedEx 폴더를 만들고 Administration 폴더에 넣으면 그에 따라 .txt 문서가 나타납니다.

이 실제 경로가 문서를 작성해야하는 폴더 할 수 있습니다 :

C:\Users\user2\Desktop\work\SuperBy\nop\NopCommerceStore\FedEx 

코드가 작동을 변경하는 방법, 정말이 몇 가지 도움이 필요 어떻게 간단하게 이해하지 않습니다. 당신의 문을 그만 내놓고

try 
{ 
    Order o = IoC.Resolve<IOrderService>().GetOrderById(orderID); 
    Customer ThisCustomer = o.Customer; 

    // Specify file, instructions, and privelegdes 
    string path = System.Web.HttpContext.Current.Request.PhysicalPath; 
    int index = path.LastIndexOf("\\"); 
    string realPath = path.Substring(0, index + 1); 
    FileStream file = new FileStream(realPath + "/FedEx/" + orderID.ToString() + ".txt", FileMode.OpenOrCreate, FileAccess.Write); 
} 
+0

realPath + "/../FedEx/"도움이 될 수 있습니다. –

+0

Thomas! 감사합니다. – koffe14

답변

2
try 
{ 
    Order o = IoC.Resolve<IOrderService>().GetOrderById(orderID); 
    Customer ThisCustomer = o.Customer; 

    // Specify file, instructions, and privelegdes 
    string path = System.Web.HttpContext.Current.Request.PhysicalPath; 
    int index = path.LastIndexOf("\\"); 
    string realPath = path.Substring(0, index + 1); 
    FileStream file = new FileStream(realPath + "/../FedEx/" + 
     orderID.ToString() + ".txt", FileMode.OpenOrCreate, FileAccess.Write); 
} 
+0

감사합니다. 효과가 뛰어납니다 – koffe14

2

, 나는이 같은 경로를 만들 생각 :

try 
{ 
    Order o = IoC.Resolve<IOrderService>().GetOrderById(orderID); 
    Customer ThisCustomer = o.Customer; 

    // Specify file, instructions, and privelegdes 
    string path = System.Web.HttpContext.Current.Request.PhysicalPath; 

    // this should give me the index at which the "\administration" part of the 
    // path starts so we can cut it off 
    int index = path.IndexOf("\\administration", 
     StringComparison.OrdinalIgnoreCase); 

    // when building the path we substring from 0 to the index of the 
    // "\administration" part of the string, add "FedEx", the order id, 
    // and then finally ".txt" 
    string realPath = Path.Combine(path.Substring(0, index), "FedEx", 
     orderID.ToString(), ".txt"); 

    // now open the file 
    FileStream file = new FileStream(realPath, 
     FileMode.OpenOrCreate, 
     FileAccess.Write); 
} 

는 또한, Path.Combine 여기 정말 중요합니다. 경로를 구축 할 때 매우 신속하게 문제가 될 수 있으므로 \을 올바른 위치에 배치하면 완벽하게 처리됩니다.

+0

고마워요! 나는 결합에 익숙하지 않다. 그러나 나는 web.config의 "appsettings"에 "addkey"를 만들었고 값으로 로컬 링크를 사용했다. c :/user/.. etc 그러나 lokal 링크를 사용하는 것은 보이지 않는다. 가장 좋은 아이디어가되고 나는 좀 더 추상적 인 해결책을 시도하려고합니다. 현재 localhost에서 NopCommerce를 실행 중이지만 나중에 서버에 업로드합니다. 팁 주셔서 감사합니다 =) – koffe14

+0

그것은 작동하지 않았다. 나는 당신에게 wroye \\ administration를 보지만 그 파일은 NopCommerceStore에 저장되도록 고집되어있다. Meaby 그것은 폴더 위치 변경 작업합니까? – koffe14

+0

@KristofferAndersson,'\\ Administration'에 대한 아이디어는 시작할 때 색인을 찾아서 잘라 버릴 수 있었다. 소문자'a'를 사용하여'\\ administration'을 작성 했으므로 문자열 비교가 순서가 맞지 않아도됩니다. –

0

System.Web.HttpContext.Current.Request.PhysicalPath, 반환

C : \ 사용자 \ 사용자 2 \ 바탕 화면 \ 작업 \ SuperBy \ NOP \ NopCommerceStore \ 관리,

따라서, 당신은 realPathFedEx를 추가하기 전에 \Administration 드롭 필요 .

+0

내가 볼 수 있지만 어떻게 현재 관리 폴더로 이동되므로 실제 경로를 변경합니까? 내가 어떻게 떨어 뜨리는거야? – koffe14

0

원하는 장소에 물품을 줄 수 있습니다. 이 제어를 원한다면 당신은 사용할 수 있습니다

try 
{ 
    Order o = IoC.Resolve<IOrderService>().GetOrderById(orderID); 
    Customer ThisCustomer = o.Customer; 
    FileStream file = new FileStream("C:/Users/user2/Desktop/work/SuperBy/nop/NopCommerceStore/FedEx/" + orderID.ToString() + ".txt", FileMode.OpenOrCreate, FileAccess.Write); 
} 

지금은 더 분명 다른 경로를 사용하도록 코드를 변경하는 방법. 코드를 읽을 수있는 사람이라면 누구든지 코드를 읽을 수 있어야합니다. 이 경우 자신이 있습니다.

+1

그 말이 맞는 것 같습니다. 이것은 더 읽기 쉽습니다. imput 주셔서 감사! – koffe14