各位大侠,c#中创建目录和文件时的路径问题!!!!!求助!!!!!!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各位大侠,c#中创建目录和文件时的路径问题!!!!!求助!!!!!!!!相关的知识,希望对你有一定的参考价值。

c#,web程序,想在cs程序中根据指定路径创建windows目录及文件,写了下面的代码,报错为:是物理路径,应为虚拟路径,请问怎么改呢,对这块基本不懂。
strPATH = ChgPATH(txtLBPATH.Text) + this.ZSKWDLB_MC.Text + "\\";
if (!Directory.Exists(Server.MapPath(strPATH)))

Directory.CreateDirectory(Server.MapPath(strPATH));
File.Create(strPATH).Close();
strPATH 生成了之后是:c:/监管一室/

判断给出的路径是目录路径还是文件路径
如果能够确定给出的路径是已经存在的,那么可以使用Directory.Exists()和File.Exists()来判断路径是目录还是文件。不能确定给定的路径存在,可以使用Path.GetFileName()获取路径中的文件名,如能取到文件名显然路径是一个文件路径,如不能则是路径。说明,目录路径的最后一个字符应该是以’\’来结束。
合并路径
有些路径的不同部分是从不同的地方取得,这是需要将这些部分进行组合,形成一个完整的路径。在组合的过程中不可避免的要涉及到对”\”的处理,这时可以使用Path.Combine()把路径的不同部分组合到一起。Path.Combine()有多种形式的重载,满足不同的需求。需要说明的是,在用Path.Combine()不接受不合法的文件名或者路径名,并且在合并时,如果某一个部分是从绝对路径开始的,则合并操作重置为从该绝对路径开始,舍弃前面的已经合并的路径。例如:
string[] paths = @"d:\archives", "2001", "e:\\", "images";
string fullPath = Path.Combine(paths);
//fullPath 为 e:\images
Console.WriteLine(fullPath);

fullPath为e:\images
获取路径的特定部分,如:文件名,扩展名,文件目录等
Path.GetFileName(path);//获取文件名
Path.GetFileNameWithoutExtension(path); //获取文件名,不带扩展名
Path.GetExtension(path) ; //获取文件扩展名
Path.GetDirectoryName(path) ; //获取文件目录
Path.GetPathRoot(path) ;//获取根目录信息
更具体的可以参看MSDN http://msdn.microsoft.com/zh-cn/library/system.io.path_methods.aspx
Path其它的一些功能函数
Path.GetRandomFileName() 获取一个随机的文件名或者目录名
Path.GetTempFileName() 创建磁盘上唯一命名的零字节的一个临时文件并返回该文件的完整路径
Path.GetTempPath() 获取当前用户的临时目录路径
Path.HasExtension() 确定路径是否包含文件扩展名
获取和应用程序相关的路径
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径,包括文件名。
System.Environment.CurrentDirectory 获取或设置应用程序当前工作目录的完全限定路径
System.IO.Directory.GetCurrentDirectory() 获取或设置应用程序的当前工作目录,不一定是应用程序的启动目录,是应用程序最后一次操作过的目录。
环境变量相关
使用System.Environment.GetEnvironmentVariable()能够获取和环境变量相关的文件路径,例如:
System.Environment.GetEnvironmentVariable("windir") 获取操作系统所在的目录
System.Environment.GetEnvironmentVariable("INCLUDE") 获取头文件所在的目录
System.Environment.GetEnvironmentVariable("TMP") 获取临时目录
System.Environment.GetEnvironmentVariable("Path") 获取Path环境变量所包含的文件目录
自然,使用System.Environment.SetEnvironmentVariable() 能够设置环境变量
参考技术A if (Directory.Exists(Application.StartupPath + "\\SmallTicket") == false)//在当前根目录下如果不存在就创建SmallTicket文件夹

Directory.CreateDirectory(Application.StartupPath + "\\SmallTicket");
参考技术B 首先,需要具有相应的权限。
使用 System.IO.Path.Combine 方法组合文件路径
参考技术C 用DirectoryInfo这个试试看吧!
string path="xxxxxxxxx";//文件路径

DirectoryInfo dire=new DirectoryInfo(path)
if(dire.Exists)

dire.Create();

本回答被提问者和网友采纳
参考技术D

我在 Linux 中使用 python 提取 zip 文件时的目录相关问题,其中 zip 使用 java 8 在窗口系统中创建

【中文标题】我在 Linux 中使用 python 提取 zip 文件时的目录相关问题,其中 zip 使用 java 8 在窗口系统中创建【英文标题】:Directory related issue while I am extracting zip file using python inside Linux where zip created in window system using java 8 【发布时间】:2020-11-09 21:39:55 【问题描述】:

**我有一个文件夹,里面有一些文件和子目录,其中也有一些文件。 但是当我使用以下 python 代码在 Linux 系统中提取 zip 文件时。它不是创建子目录,而是创建名称包含子目录名称和分隔符的文件,其中该 zip 文件是我通过以下代码在窗口系统中使用 java 语言创建的。

示例:ABC.zip 文件包含 abc.txt,子文件夹名为 ABCD,此 ABCD 文件夹包含一个文件名为 test.txt 然后在 python 中,当我提取时,它会创建两个带有 abc.txt、ABCD\text.txt 名称而不是 ABCD 文件夹的文件,然后在 ABCD text.txt 文件中创建两个文件**

Python 端代码:提取 zip 文件

import zipfile
with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
zip_ref.extractall(directory_to_extract_to)

Java 端代码:创建 zip 文件

String srcDir = "E:\\tomcat\\ai_data\\3";
File file = new File(srcDir);

File desFile = new File(srcDir.concat(".zip"));

final Path sourceDir = Paths.get(srcDir);
String zipFileName = srcDir.concat(".zip");
try 
    final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
    
    Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() 
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) 
            try 
                Path targetFile = sourceDir.relativize(file);
                 
                outputStream.putNextEntry(new ZipEntry(targetFile.toString()));
                byte[] bytes = Files.readAllBytes(file);
                outputStream.write(bytes, 0, bytes.length);
                outputStream.flush();
                outputStream.closeEntry();
             catch (IOException e) 
                LOGGER.error("Create Zip file " + file.getFileName(), e.getMessage());
            
            return FileVisitResult.CONTINUE;
        
    );
    outputStream.close();
 catch (IOException e) 

【问题讨论】:

【参考方案1】:

问题似乎是 Java 代码使用 Windows 分隔符 (\) 样式创建 zip 文件条目,然后 python 代码看到文件包含 (\) 并认为是名称的一部分,因为它期望 ( / ) 作为路径分隔符。如果 java 代码总是要创建要在 linux 系统上提取的 zip 文件,请尝试将 zip 条目的文件路径转换为使用 Linux 分隔符,例如:

Path targetFile = sourceDir.relativize(file);

//Convert seperators to Linux Style
String linuxStylePath = FilenameUtils.seperatorsToUnix(targetFile.toString());   

outputStream.putNextEntry(new ZipEntry(linuxStylePath));

参考Apache Commons IO Library进行路径转换。

【讨论】:

以上是关于各位大侠,c#中创建目录和文件时的路径问题!!!!!求助!!!!!!!!的主要内容,如果未能解决你的问题,请参考以下文章

一道关于C#的问题,烦请各位大侠回答!

在 IIS 6.0 中创建虚拟目录时的正确文件夹位置?

如何在 C# 中创建相对于用户文档的文件目录?

求助各位大侠!怎样C#用 连接FTp服务器(学校的),并且显示服务器上文件夹和文件的内容。

如何在 C 语言的 windows 的 %appdata% 路径中创建目录并创建文件

在 c# 中创建/打开从路径到新 Outlook.MailItem 的现有味精