如何在.NET Core中从Linux应用程序操作Windows路径,反之亦然?

时间:2019-03-18 16:58:53

标签: .net-core cross-platform path-separator path-manipulation

我正在构建一个数据传输工具,该工具可以部署到Windows或Linux Docker容器中,该容器必须指示SQL Server进行数据库快照。此外,SQL Server可能位于Windows或Linux上,我需要指定.ss文件在服务器上的 位置。我一直在使用Path.GetFilenameWithoutExtensionPath.Combine等,但是Path操作是在应用运行所在的操作系统的上下文中完成的。我需要WindowsPath.Combine这样的东西才能运行在Linux上与Windows上的SQL Server实例通信时。现在,我自己进行字符串操作,但我更喜欢使用Path或可能的目的构建的东西。我知道我正在运行的操作系统以及SQL Server正在运行的操作系统,只需要与操作系统无关的Path

1 个答案:

答案 0 :(得分:0)

我认为您需要制作自己的静态函数类来执行Windows特定的路径操作。 “ C:\ MyDir \ MyFile.ext”实际上可以是Linux上文件的名称。

您可以查看.NET Path的各种实现,并且可以看到它只是在使用字符串操作:

https://github.com/microsoft/referencesource/blob/master/mscorlib/system/io/path.cs

我建议您从所需的方法开始。例如:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#kate: syntax Python ;

# use them like so:

import          socket,               os , time
parent, child = socket.socketpair()

#child.close() # bad fdesc

pid           =                       os.fork()
if pid:
    #time.sleep(0.3)
    #child.close()
    print 'in   parent, sending    message'
    p =         parent.sendall('ping p')
    response1 = parent.recv(444)
    print      'response from child         :', response1
    p =         parent.close()

else:
    #time.sleep(0.7)
    #parent.close()

    print  'in child, waiting for message'
    message1 = child.recv(333)
    print  'message from parent         :', message1

    child.sendall('päng c')
    child.close()

#print "Ende" , pid
#print parent # , child
#print type(pid) , " -- " , type(child)