dotnet Core-내 프로젝트에서 streamreader 용 csv 파일의 올바른 위치 가져 오기

si2030

나는 이것이 쉬울 것이라고 생각했지만 내 프로젝트 중 하나에서 csv 파일을 참조하는 방법을 아는 데 어려움이 있습니다.

여기 솔루션 디스플레이에 있습니다.

여기에 이미지 설명 입력

참조하는 코드에 잘못된 작업 오류가 발생하여 파일을 찾을 수 없으며 스테핑 및 null을 통해 확인되지 않았습니다.

public class CATALOGStateInitialiser : ICATALOGStateInitialiser
{
    public void CATALOGInitialiseStates(CATALOGContext context)
    {
        if (context == null) throw new ArgumentNullException(nameof(context));

        if (context.States.Any()) return; //DB table data already created.

        using var resourceStream = GetType().Assembly
            .GetManifestResourceStream(
                "JobsLedger.INITIALISATION.SUBURB.Initialisations.AddressCSV.states.csv");
        var reader = new StreamReader(resourceStream ?? throw new InvalidOperationException(), Encoding.UTF8);

        reader.Dispose();

        var stringStates = reader.ReadToEnd();

        var stringSeparators = new[] {"\r\n"};

        var states = stringStates.Split(stringSeparators, StringSplitOptions.None)
            .Select(FromCsv)
            .Where(a => a != null)
            .ToList();

        context.SaveChanges();
    }

    public static State FromCsv(string csvLine)
    {
        if (csvLine == null) throw new ArgumentNullException(nameof(csvLine));


        var values = csvLine.Split(',');

        if (values.Length <= 1) return null;
        var state = new State
        {
            StateName = values[0],
            StateShortName = values[1]
        };

        return state;
    }
}

다음은 실제 csv 파일을 찾으려는 행입니다.

        using var resourceStream = GetType().Assembly
            .GetManifestResourceStream(
                "JobsLedger.INITIALISATION.SUBURB.Initialisations.AddressCSV.states.csv");

.. 그리고 이것은 파일을 찾지 못한 오류를 던지는 줄입니다 :

    var reader = new StreamReader(resourceStream ?? throw new InvalidOperationException(), Encoding.UTF8);

그래서 나는 분명히 올바른 경로 나 구문 또는 둘 다를 넣지 않았습니다.

INITIALISATION 라이브러리 프로젝트의 states.csv 위치가 주어지면 어떻게 올바르게 참조합니까?

최신 정보

읽기 전에 Reader를 폐기하고 잘못된 경로를 가지고 있다는 점에서 코드가 약간 잘못되었습니다. 나는 또한 dimlucas가 말한 것을했지만 결국 "Copy to"옵션에서 그것을 embedResource로 변경하고 "copy if newer"로 변경했습니다.

현재 작동하는 코드는 다음과 같습니다.

using System;
using System.IO;
using System.Linq;
using System.Text;
using JobsLedger.CATALOG;
using JobsLedger.CATALOG.ENTITIES;
using JobsLedger.INITIALISATION.CATALOG.Initialisations.Interfaces;

namespace JobsLedger.INITIALISATION.CATALOG.Initialisations
{
    public class CATALOGStateInitialiser : ICATALOGStateInitialiser
    {
        public void CATALOGInitialiseStates(CATALOGContext context)
        {
            if (context == null) throw new ArgumentNullException(nameof(context));

            if (context.States.Any()) return; //DB table data already created.

            using var resourceStream = GetType().Assembly
                .GetManifestResourceStream(
                    "JobsLedger.INITIALISATION.AddressCSV.states.csv");
            var reader = new StreamReader(resourceStream ?? throw new InvalidOperationException(), Encoding.UTF8);

            var stringStates = reader.ReadToEnd();

            reader.Dispose();

            var stringSeparators = new[] {"\r\n"};

            var states = stringStates.Split(stringSeparators, StringSplitOptions.None)
                .Select(FromCsv)
                .Where(a => a != null)
                .ToList();

            context.SaveChanges();
        }

        public static State FromCsv(string csvLine)
        {
            if (csvLine == null) throw new ArgumentNullException(nameof(csvLine));


            var values = csvLine.Split(',');

            if (values.Length <= 1) return null;
            var state = new State
            {
                StateName = values[0],
                StateShortName = values[1]
            };

            return state;
        }
    }
}
Dimlucas

Visual Studio를 사용하는 경우 파일을 클릭하고 속성 창으로 이동합니다.

에서 Build Action옵션 중 하나를 선택 Resource하거나 Content.

에서 Copy to Output Directory옵션을 선택Copy always

이렇게하면 프로젝트를 빌드 할 때 파일이 bin 폴더로 이동됩니다. 현재 .csv 파일은 소스 코드의 일부일 뿐이며 최종적으로 .NET Core에서 실행되는 최종 바이너리의 일부가 아닙니다. 첫 번째 옵션은 파일이 바이너리에 포함되도록하고 두 번째 옵션은 동기화 문제를 방지하기 위해 모든 후속 빌드 작업에서 파일이 복사되도록합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Visual Studio 16.6의 DotNet Core 3.1 프로젝트로 콘텐츠 전용 패키지 가져 오기

분류에서Dev

Swift 5를 사용하여 프로젝트의 하위 그룹에서 파일 경로 가져 오기

분류에서Dev

CSS 내용과 같은 위치에 바닥 글 가져 오기

분류에서Dev

내 프로젝트의 다른 경로에서 사전 가져 오기

분류에서Dev

와일드 카드 일치가있는 내용을 기반으로 텍스트 파일의 이름을 바꾸는 Windows 배치 파일 가져 오기

분류에서Dev

csv 파일을 Java의 원격 위치에서 사용 가능한 mongodb로 가져올 수 없습니까?

분류에서Dev

Xcode에서 프로젝트 내보내기 (xarchive 파일 가져 오기)

분류에서Dev

.cpp 및 .h 소스 파일을 표시하지 않고 다른 프로젝트에서 사용하기 위해 Visual Studio C ++ 프로젝트 내보내기

분류에서Dev

Powershell-다른 파일에서 내용 가져 오기

분류에서Dev

JS 파일에서 ajax 호출을 위해 올바른 URL 가져 오기

분류에서Dev

파일 내의 IP 주소에서 도시 위치 가져 오기

분류에서Dev

Java로 파일 내용 가져 오기

분류에서Dev

cURL 또는 파일로 CSV 가져 오기 내용 가져 오기 및 게시물 값 전송

분류에서Dev

GitHub 프로젝트에서 사용 가능한 .jar 파일 내보내기

분류에서Dev

.cs 클래스에서 .aspx 파일의 내용 가져 오기

분류에서Dev

StreamReader 위치 가져 오기 및 설정

분류에서Dev

배치 파일에서 FOR 명령을 사용하여 텍스트 파일의 내용을 가져 오는 방법

분류에서Dev

Systemtap 프로브 사용 Linux에서 모든 읽기 쓰기 작업에 대해 바이트의 가상 주소 위치 가져 오기

분류에서Dev

Javascript에서 다른 위치의 오프셋 가져 오기

분류에서Dev

사용자 정의 UICollectionViewCell에서 올바른 버튼 가져 오기

분류에서Dev

csv의 파일 이름과 zip 내부의 비동기 읽기로 내용을 모두 가져올 수 없습니다.

분류에서Dev

완전히 다른 JSP 프로젝트에서 JSP 프로젝트로 XML 파일 가져 오기

분류에서Dev

Python : 다른 위치에서 파일 가져 오기

분류에서Dev

가라테 시나리오에서 사용하기 위해 csv 파일에 저장되고 사용되는 json 요청 본문의 올바른 형식을 식별 할 수 없습니다.

분류에서Dev

파일 내용을 읽기 위해 Flutter 웹 (크롬)을 사용하여 시스템 디렉토리에서 파일 경로 가져 오기 예 : CSV 또는 텍스트 파일

분류에서Dev

CSV 파일 가져 오기 및 백엔드로 보내기

분류에서Dev

다른 프로젝트 protobuf 파일에서 메시지 유형 가져 오기

분류에서Dev

JAVA : 텍스트 파일에서 특정 문자열의 내용 가져 오기

분류에서Dev

텍스트 파일의 내용을 반사 프로젝트로 가져 오는 가장 좋은 방법

Related 관련 기사

  1. 1

    Visual Studio 16.6의 DotNet Core 3.1 프로젝트로 콘텐츠 전용 패키지 가져 오기

  2. 2

    Swift 5를 사용하여 프로젝트의 하위 그룹에서 파일 경로 가져 오기

  3. 3

    CSS 내용과 같은 위치에 바닥 글 가져 오기

  4. 4

    내 프로젝트의 다른 경로에서 사전 가져 오기

  5. 5

    와일드 카드 일치가있는 내용을 기반으로 텍스트 파일의 이름을 바꾸는 Windows 배치 파일 가져 오기

  6. 6

    csv 파일을 Java의 원격 위치에서 사용 가능한 mongodb로 가져올 수 없습니까?

  7. 7

    Xcode에서 프로젝트 내보내기 (xarchive 파일 가져 오기)

  8. 8

    .cpp 및 .h 소스 파일을 표시하지 않고 다른 프로젝트에서 사용하기 위해 Visual Studio C ++ 프로젝트 내보내기

  9. 9

    Powershell-다른 파일에서 내용 가져 오기

  10. 10

    JS 파일에서 ajax 호출을 위해 올바른 URL 가져 오기

  11. 11

    파일 내의 IP 주소에서 도시 위치 가져 오기

  12. 12

    Java로 파일 내용 가져 오기

  13. 13

    cURL 또는 파일로 CSV 가져 오기 내용 가져 오기 및 게시물 값 전송

  14. 14

    GitHub 프로젝트에서 사용 가능한 .jar 파일 내보내기

  15. 15

    .cs 클래스에서 .aspx 파일의 내용 가져 오기

  16. 16

    StreamReader 위치 가져 오기 및 설정

  17. 17

    배치 파일에서 FOR 명령을 사용하여 텍스트 파일의 내용을 가져 오는 방법

  18. 18

    Systemtap 프로브 사용 Linux에서 모든 읽기 쓰기 작업에 대해 바이트의 가상 주소 위치 가져 오기

  19. 19

    Javascript에서 다른 위치의 오프셋 가져 오기

  20. 20

    사용자 정의 UICollectionViewCell에서 올바른 버튼 가져 오기

  21. 21

    csv의 파일 이름과 zip 내부의 비동기 읽기로 내용을 모두 가져올 수 없습니다.

  22. 22

    완전히 다른 JSP 프로젝트에서 JSP 프로젝트로 XML 파일 가져 오기

  23. 23

    Python : 다른 위치에서 파일 가져 오기

  24. 24

    가라테 시나리오에서 사용하기 위해 csv 파일에 저장되고 사용되는 json 요청 본문의 올바른 형식을 식별 할 수 없습니다.

  25. 25

    파일 내용을 읽기 위해 Flutter 웹 (크롬)을 사용하여 시스템 디렉토리에서 파일 경로 가져 오기 예 : CSV 또는 텍스트 파일

  26. 26

    CSV 파일 가져 오기 및 백엔드로 보내기

  27. 27

    다른 프로젝트 protobuf 파일에서 메시지 유형 가져 오기

  28. 28

    JAVA : 텍스트 파일에서 특정 문자열의 내용 가져 오기

  29. 29

    텍스트 파일의 내용을 반사 프로젝트로 가져 오는 가장 좋은 방법

뜨겁다태그

보관