【问题标题】:How do I get the folder for the currently open file in c#如何在c#中获取当前打开文件的文件夹
【发布时间】:2016-08-18 13:54:05
【问题描述】:

我正在编写一个从数据库(如文件)中提取信息的向导。该向导不会被编译,它只是在命令下运行。我不确定正确的术语。

问题是,我需要输入更多信息来操作数据库,并且我想将这些值存储到我用来操作数据库的 csv 文件中。

所以问题是:如何在 c# 应用程序中获取当前打开文件的文件夹,以便将 csv 文件保存到该文件夹​​?

编辑:路径需要是动态的。每个数据库文件都存储在一个单独的文件夹中。我需要向导将文件保存到我刚刚打开文件的文件夹中。

编辑2: 我没有以编程方式打开文件。用户正在应用程序中打开该文件。所以,用户打开一个文件,就会显示一堆数据库信息。然后,他在该数据上运行一个向导,他可以在其中输入一些系数等,这将更改数据库文件中的信息。我需要能够将他输入的系数存储到包含他打开的数据库文件的文件夹中。我无法访问/更改应用程序代码,只能访问向导代码。

谢谢

【问题讨论】:

  • 1.这是 c# 而不是 python,2. 我需要应用程序提供文件名或当前文件夹,它需要是动态的,而不是硬编码

标签: c# directory


【解决方案1】:

这样的?

    var file = "C:\\Users\\Me\\Desktop\\Test.txt";
    var fileLocation = file.Substring(0, file.LastIndexOf("\\"));

【讨论】:

  • 路径需要是动态的。每个数据库文件都存储在一个单独的文件夹中。我需要向导将文件保存到我刚刚打开文件的文件夹中。
  • 就是我刚才告诉你的。文件的路径将在那里,所以只需将其修剪掉 ffs。
  • 我需要动态查找当前打开文件的路径。每个文件位于不同的文件夹中。如果我硬编码一个文件 var .. 那对我没有好处。我需要与特定数据库文件一起存储的 csv,每个文件都在一个单独的文件夹中。
  • 你让我的大脑受伤了。如果您在 C# 程序中打开文件,请将位置存储为变量,因为您的应用程序清楚地知道它在哪里,然后将其修剪掉?除非你告诉我一步一步你在说什么,否则我无法解释这一点。
  • 我没有以编程方式打开文件。用户正在应用程序中打开该文件。所以,用户打开一个文件,就会显示一堆数据库信息。然后他在该数据上运行一个向导,他可以在其中输入一些系数等,这将更改数据库文件中的信息。我需要能够将他输入的系数存储到包含他打开的数据库文件的文件夹中。我无法访问/更改应用程序代码,只能访问向导代码。
【解决方案2】:

你可以用这个:

string path = Path.GetFullPath(Directory.GetCurrentDirectory()).TrimEnd(Path.DirectorySeparatorChar);
string directoryName = Path.GetFileName(path);

我在这个帖子中找到了这个解决方案

Get the (last part of) current directory name in C#

【讨论】:

  • 谢谢,但同样,我没有路径、文件或文件名。我需要应用程序告诉我它当前打开的文件的路径。阅读您链接的那篇文章,我只看到 Environment.CurrentDirectory。我需要这样的东西,但是..由于某种原因我无法访问 Environment.CurrentDirectory。
【解决方案3】:

试试

//Or where ever the database returns the file is stored
var filename = "C:\\Temp\\File\\Test.txt";          
var path = System.IO.Path.GetDirectoryName(filename);

应该返回 C:\Temp\File

来源:https://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname(v=vs.110).aspx

【讨论】:

    【解决方案4】:

    尝试使用DirectoryInfo 获取有关任何目录的信息:

    using System;
    using System.IO;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
                if (di != null)
                {
                    FileInfo[] subFiles = di.GetFiles();
                    if (subFiles.Length > 0)
                    {
                        Console.WriteLine("Files:");
                        foreach (FileInfo subFile in subFiles)
                        {
                            Console.WriteLine("   " + subFile.Name + " (" + subFile.Length + " bytes) " + "Directory name: " 
                                + di.Name + " Directory full name: " + di.FullName);
                        }
                    }
                    Console.ReadKey();
                }
    
            }
        }
    }
    

    【讨论】:

    • 这似乎是正确的方向 .. 但给了我 C:\Users\admin\AppData\Local\Temp\CSCRIPT\Cache\537240694 .. 看起来像向导的位置?正在执行向导替换有关打开文件的信息或.. 我理解正确吗?
    • 执行向导正在将打开的文件缓存到%temp%
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多