我的应用程序中有一部分显示用户通过OpenFileDialog加载的文件路径.它占用了太多空间来显示整个路径,但我不想只显示文件名,因为它可能不明确.所以我更喜欢显示相对于assembly/exe目录的文件路径.
例如,程序集位于"C:\ Program Files\Dummy Folder\MyProgram",文件位于"C:\ Program Files\Dummy Folder\MyProgram\Data\datafile1.dat",然后我希望它显示".\DATA\datafile1.dat".如果文件位于"C:\ Program Files\Dummy Folder\datafile1.dat"中,那么我想要"..\datafile1.dat".但是,如果文件位于根目录下或根目录下的1个目录中,则显示完整路径.
你会推荐什么解决方案?正则表达式?
基本上我想显示有用的文件路径信息而不占用太多屏幕空间.
编辑:只是为了澄清一点.此解决方案的目的是帮助用户或我自己知道我最后加载了哪个文件,大致来自哪个目录.我正在使用只读文本框来显示路径.大多数情况下,文件路径比文本框的显示空间长得多.该路径应该是提供信息的,但不足以占用更多的屏幕空间.
Alex Brault的评论很好,Jonathan Leffler也是如此.DavidK提供的Win32功能只能帮助解决部分问题,而不是整个问题,但无论如何都要感谢.至于James Newton-King的解决方案,我稍后会在我自由时试一试.
我从源代码管理中检查了一个C#代码分支.它包含各种文件夹中的50个项目.没有找到现有的.sln文件.
我打算创建一个空白解决方案来添加现有解决方案.用户界面只允许我一次完成这个项目.
有什么我想念的吗?我想指定一个*.csproj文件列表,并以某种方式提出一个包含所有项目的.sln文件.
我从OpenFileDialog获取一个文件,该文件返回一个字符串,其中包含所选文件的绝对路径.现在我希望该路径作为给定路径的相对路径(在这种情况下是我的应用程序的路径).
所以我想说我得到了一个文件的路径:
c:\myDock\programming\myProject\Properties\AssemblyInfo.cs
我的申请位于
c:\myDock\programming\otherProject\bin\Debug\program.exe
然后我想要结果:
..\..\..\myProject\Properties\AssemblyInfo.cs
我有一个项目,从c:\ work\SomeVariantFolder\MySolution\MyProject\Bin\Debug运行,我需要从其中一个子文件夹执行该项目的命令行:c:\ work\SomeVariantDev.我面临的问题是从我的项目运行的文件夹到我想要运行此命令行的文件夹.
请注意,我不能将批处理文件用于此解决方案.
我试图做的 - 声明一个私有方法,它从同一个进程执行三个命令,向上运行四个文件夹,然后执行我的命令,但这似乎不起作用.我觉得我在这里做错了,因为如果我从c:\ work\SomeVariantFolder \运行这个命令,那就好了.
var process = new System.Diagnostics.Process();
var startInfo = new System.Diagnostics.ProcessStartInfo
{
WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
FileName = "cmd.exe",
RedirectStandardInput = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.Start();
process.StandardInput.WriteLine("cd..");
process.StandardInput.WriteLine("cd..");
process.StandardInput.WriteLine("cd..");
process.StandardInput.WriteLine("cd..");
process.StandardInput.WriteLine("my command");
Run Code Online (Sandbox Code Playgroud)
请注意,由于我的解决方案的性质,我不能使用批处理文件,不能使用c:\ work\SomeVariantFolder作为硬编码文件夹,因为"SomeVariantFolder"名称在某些情况下可能会更改.
任何帮助都会得到满足
我想知道是否有人能告诉我如何将StreamReader指向程序当前工作目录中的文件.
EG说我有程序Prog,保存在目录C:\ ProgDir中.我将\ ProgDir提交到共享文件夹.里面的ProgDir是另一个包含我要导入Prog的文件的目录(例如\ ProgDir\TestDir\TestFile.txt)我想这样做,以便StreamReader可以读取那些TestFiles,即使目录的路径有改变;
(EG,在我的电脑上,Testfiles的路径是
C:\ ProgDir\TESTDIR\TESTFILE.TXT
但是在另一个人的计算机上,目录是
C:\ dev_code\ProgDir\TESTDIR\TESTFILE.TXT
).
如何从另一个人的计算机上的TestFile.txt中读取StreamReader?(澄清一下,文件名不会改变,唯一的变化就是路径ProgDir)
我尝试了以下方法:
string currentDir = Environment.CurrentDirectory;
DirectoryInfo directory = new DirectoryInfo(currentDir);
FileInfo file = new FileInfo("TestFile.txt");
string fullDirectory = directory.FullName;
string fullFile = file.FullName;
StreamReader sr = new StreamReader(@fullDirectory + fullFile);
Run Code Online (Sandbox Code Playgroud)
(从中获取:获取相对于当前工作目录的路径?)
但我得到"当前上下文中不存在TestFile".任何人都知道如何处理这个问题?
谢谢.
可能重复:
获取相对于当前工作目录的路径?
我在C#中有代码,包括从绝对路径到相对的一些图像,因此无论应用程序折叠位于何处,都可以找到图像.
例如,我的代码(以及我的笔记本电脑中的图像)中的路径是
C:/something/res/images/image1.jpeg
Run Code Online (Sandbox Code Playgroud)
我想要我的代码中的路径
..../images/image1.jpeg
Run Code Online (Sandbox Code Playgroud)
因此它可以在放置文件夹的任何地方运行,无论C:分区的名称是什么等.
我希望在我的代码中有一个独立于应用程序文件夹位置的路径,或者它是否在另一个分区中,只要它与解决方案的其余部分位于同一文件夹中.
我有这个代码:
try
{
File.Delete("C:/JPD/SCRAT/Desktop/Project/Resources/images/image1.jpeg");
}
catch (Exception)
{
MessageBox.Show("File not found:C:/Users/JPD/Desktop/Project/images/image1.jpeg");
}
Run Code Online (Sandbox Code Playgroud)
此代码仅在文件和文件夹位于该特定路径时运行(也是代码的位置)我希望该路径是相对的,所以无论我把整个文件夹(代码,文件等)放在哪里,程序仍然会只要代码(在项目文件夹下)与文件夹图像位于同一位置就可以工作......我该怎么办?
我在连接到我的sqlite数据库时遇到问题.该文件位于应用程序的文件夹中.这是连接字符串
string path = "Data Source=MY.db";
Run Code Online (Sandbox Code Playgroud)
如果我使用绝对路径,我可以让它工作,但如果我尝试使用相对路径,它会给我一个"找不到表"错误.有任何想法吗?
可能重复:
如何获取当前用户的"Application Data"文件夹的路径?
Windows XP应用程序数据文件夹?
我必须在应用程序数据中保存一些设置,但是,当我使用某些东西时,"@C:\Documents ..."有人可以在D:\上运行风,那么如何获取该目录?
我遇到一堆绝对路径的情况,我想将它们转换为基于MSBuild的另一个目录的相对路径。这是我到目前为止的代码:
<PropertyGroup>
<FromPath>$(Bar)</FromPath>
</PropertyGroup>
<ItemGroup>
<AbsolutePaths Include="@(Foo)" Exclude="@(Baz)" />
<PathsRelativeToBar Include="@(AbsolutePaths->'???')" /> <!-- What goes here? -->
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激,谢谢!
编辑:我在这个 StackOverflow问题中找到了一个基于C#的解决方案,但是我不确定如何(或是否有可能)将其转换为MSBuild。