2011-06-20 20 views
65

プロジェクトのルートディレクトリに追加したテキストファイルの最初の行を読みたいと思います。意味、私のソリューションエクスプローラは私のプロジェクトの.csファイルの横に.txtファイルを表示しています。プロジェクトのルートディレクトリにあるテキストファイルを読み取る方法は?

だから、私が実行しようとしました:

TextReader tr = new StreamReader(@"myfile.txt"); 
string myText = tr.ReadLine(); 

しかし、それはビンフォルダを参照だと、私のファイルが存在していないので、これは動作しません...どのように私はこの作業を行うことができますか? :/

ありがとう

+0

btw、StreamReaderの名前はちょっと混乱していますが、マイクロソフトは私の意見でこのTextStreamReaderの名前を付けたはずです –

答えて

97

、右myfile.txtの上でクリックして、そこから

の "プロパティ" を選択し、

enter image description here

Copy alwaysまたは Copy if newerのいずれかに contentCopy to Output DirectoryBuild Actionを設定

+2

私はこのファイルを自分のユーザーに公開していません... dllに埋め込み、そこから? – foreyez

+2

@foreyezおそらく、ファイルを使用する代わりに、リソースとしてプロジェクトに文字列を追加します。データが入手できないことに注意してください - このファイルにはどの程度のデータが含まれていますか? –

+4

ビルドオプションを '組み込みリソース'に設定し、エミュレートされたリソースを読み込む方法についての記事を読んでください。http://blogs.msdn.com/b/nikola/archive/2008/05/14/embedded-resources.aspx – Sung

3

この場合、絶対パスを使用する必要があります。しかし、CopyToOutputDirectory = CopyAlwaysを設定した場合、それを実行している間は機能します。ソリューションエクスプローラから

25

あなたは以下を使用してウェブサイトプロジェクトのルートディレクトリを取得することができます:

String FilePath; 
FilePath = Server.MapPath("/MyWebSite"); 

それとも、そのようにベースディレクトリを取得することができます。

AppDomain.CurrentDomain.BaseDirectory 
23

は、プロジェクトにリソースファイルを追加します(右プロジェクト - >プロパティ - >リソースをクリックしてください)。それは "文字列"と言うと、あなたは "ファイル"に切り替えることができます。 [リソースの追加]を選択し、ファイルを選択します。

Properties.Resourcesコレクションからファイルを参照できるようになりました。

9

あなたは、これはそこからそれを取得する方法であるだけでなく(Resourceに設定されたアクションを構築する)それが埋め込ま持つことができます。

private static UnmanagedMemoryStream GetResourceStream(string resName) 
{ 
    var assembly = Assembly.GetExecutingAssembly(); 
    var strResources = assembly.GetName().Name + ".g.resources"; 
    var rStream = assembly.GetManifestResourceStream(strResources); 
    var resourceReader = new ResourceReader(rStream); 
    var items = resourceReader.OfType<DictionaryEntry>(); 
    var stream = items.First(x => (x.Key as string) == resName.ToLower()).Value; 
    return (UnmanagedMemoryStream)stream; 
} 

private void Button1_Click(object sender, RoutedEventArgs e) 
{ 
    string resName = "Test.txt"; 
    var file = GetResourceStream(resName); 
    using (var reader = new StreamReader(file)) 
    { 
     var line = reader.ReadLine(); 
     MessageBox.Show(line); 
    } 
} 

Charlesthis answerから撮影したいくつかのコードを)

9
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory); 

上記の方法では、次のようなことがあります。

"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug" 

ここから、System.IO.Directoryを使用して後方にナビゲートできます。GetParent関数:

_filePath = Directory.GetParent(Directory.GetParent(_filePath).FullName).FullName; 

さて、今あなたがC」のようなものを持っている:

_filePath = Directory.GetParent(_filePath).FullName; 

1時間は2回あなたがmyProjectNamespaceを\になりますので、このようになり、あなたはビンを\になります:\ Users \ユーザーmyuserのプロジェクト\ myProjectNamespace」\ Visual Studioの2015 \ドキュメント、これだけ例えば、あなたのファイル名に、最終的なパスを添付\:

_filePath += @"\myfile.txt"; 
TextReader tr = new StreamReader(_filePath); 

はそれがお役に立てば幸いです。

関連する問題