简体   繁体   中英

File.Exists(Path) always return false when get 'string (Path)' from text file

I write codes to receive the path of a text file and store it in a string variable that I declare in public. Then I want to know if the file exists or not by using

System.IO.File.Exists(pathoffile)

But it always returns false even though there is a file. And then when I try to add the string path directly like this

public string propertyfile = @"C:\Users\PFA Wongsawat\Desktop\part_no_and_path_list.txt"

The function

System.IO.File.Exists(pathoffile)

return true

I already check the receive path(string) that I read from the text file. By cutting off "\n" and "\r" and using trim() too.But it still returns false. Have I missed something? What difference between these two?. I'm too new to this c#. I'm very bad at this sorry in advance.

Here are my codes

public string pathfromread, partnumber, pathfile, portname, partnofromserial,propertypathfile; //Declare Variables
        public string propertyfile = @"C:\Users\PFA Wongsawat\Desktop\Properties.txt";
        public string pathoffile ;
        public string backuppath ;
        public string pdffolderpath  ;

private void propertyget()
        {
            if (File.Exists(propertyfile))
            {
                StreamReader readpropertyfile = new StreamReader(propertyfile);
                string readproperty;

                while ((readproperty = readpropertyfile.ReadLine()) != null)
                {
                    string[] propertyfromread = readproperty.Trim().Split('=');
                    if (propertyfromread.GetValue(0).ToString() == "pathoffile")
                    {
                        pathoffile = propertyfromread.GetValue(1).ToString();
                        pathoffile = pathoffile.Replace("\n", "").Replace("\r", "");
                        MessageBox.Show(pathoffile, "path file");
                    }
                    else if ((propertyfromread.GetValue(0).ToString() == "backuppath"))
                    {
                        backuppath = propertyfromread.GetValue(1).ToString();
                        backuppath = backuppath.Replace("\n", "").Replace("\r", "");
                        MessageBox.Show(backuppath);
                    }
                    else if ((propertyfromread.GetValue(0).ToString() == "pdffolderpath"))
                    {
                        pdffolderpath = propertyfromread.GetValue(1).ToString();
                        pdffolderpath = pdffolderpath.Replace("\n", "").Replace("\r", "");
                        MessageBox.Show(pdffolderpath);
                    }
                    else if ((propertyfromread.GetValue(0).ToString() == "portname"))
                    {
                        portname = propertyfromread.GetValue(1).ToString();
                        portname = portname.Replace("\n", "").Replace("\r", "");
                        MessageBox.Show(portname);
                    }
                }
            }

 private void Form1_Load(object sender, EventArgs e)
        {
            propertyget();

            dv = dt.DefaultView; //set dv index count to != 0 to prevent error from null input when click on remove button

            if (System.IO.File.Exists(pathoffile))//Check if file exist or not
            {

            }
            else
            {
                try
                {
                    MessageBox.Show("Database Text File Missing. Please Select New File", "Database Text File Missing", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    OpenFileDialog regispath = new OpenFileDialog();
                    regispath.Title = "Select Database Text File (part_no_and_path_list.txt)";
                    regispath.Multiselect = false;
                    regispath.Filter = "Text file (*.txt)|*.txt";
                    regispath.RestoreDirectory = true;
                    regispath.ShowDialog();
                    pathfile = regispath.FileName;
                    File.Copy(pathfile, pathoffile);
                }
                catch
                {

And this is my property text file

pathoffile=@"C:\Users\PFA Wongsawat\Desktop\part_no_and_path_list.txt"
backuppath=@"C:\Users\PFA Wongsawat\Documents\part_no_and_path_list.txt"
pdffolderpath=@"C:\Users\PFA Wongsawat\Downloads\"
portname=COM3

In this case the result always a messageBox showing "Database Text File Missing. Please Select New File"

Thank you and sorry for my bad English.

You don't put @" and " in the text file , you only put them in the code because that's how the c# compiler knows they're strings (and knows not to interpret slashes as an escape character)

Just make your text file look like:

pathoffile=C:\Users\PFA Wongsawat\Desktop\part_no_and_path_list.txt

I also recommend you use:

Split(new []{'='}, 2)

This will allow you to use = in your path, by making split return a maximum of 2 split values; any = that are legitimately in the path would be preserved

Actually I recommend you use one of the various built in settings mechanisms that c# has; we haven't needed to read and write our own configuration files for about 25 years

If you really do want to continue rolling your own you can reduce your code massively by using a dictionary

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

public class Settings{
    private Dictionary<string,string> _conf = new Dictionary<string,string>();

    public string PathOfFile {
      get => _conf["pathoffile"];
    }

    public void ReadConfig(){
      File.ReadAllLines("conf.txt").ToDictionary(
        x => x.Split(new[]{'='},2)[0],
        x => x.Split(new[]{'='},2)[1]
      );
    }
}

Yep, it's all you need. Every time you want to add another setting, add another property (like public string PathOfFile), add another love to the file and make sure the string in the property matches the line in the file

In other areas, please read up on c# naming conventions; PublicThingsAreNamedLikeThis, _privateLikeThis, localLikeThis, neverlikethis

Thank you I've already solved this problem

By remove "@" and '""' from path in the property text file like this.

pathoffile=C:\Users\PFA Wongsawat\Desktop\part_no_and_path_list.txt
backuppath=C:\Users\PFA Wongsawat\Documents\part_no_and_path_list.txt
pdffolderpath=C:\Users\PFA Wongsawat\Downloads\
portname=COM3

The reason I can't see this because I debug the program by seeing the result in message box and it not match with the real one. Thank you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM