socket实现目录路径的相关操作

本知识需要注意!
    1.客户端输入路径后,到达服务器端需要先加上"/"否则可能会出错
    2.找到该路径下的目录内容调用os的listdir()方法,返回的是一个列表的形式,必须将其格式化为字符串
    3.目录内容格式化为字符串,需要用某个字符去作为分隔符,再用分隔符.join()的方法将列表转为指定分隔符分隔的字符串
    4.到达客户端时,输出split()按某个特定分隔符分隔后的列表即可输出目录内容
    5.服务器端的返回上一级目录时,其原理是去掉当前路径的路径名,如c:/test/111,要返回到test则需要去掉114
    6.依据第五点的原理,需要将当前路径按windows的分隔符进行分隔,但是此方法分隔成列表后列表最后一个元素会多出一个空格,
      所以去掉路径名的同时也需要去掉空格,即在split()后加上[:-2]即可(去掉列表最后的两个元素)

#server层
import socket
import os
sk=socket.socket()
sk.bind(("10.70.2.143",8080))
sk.listen()
conn,addr=sk.accept()
#获取当前路径,以后的操作都需要根据该路径进行操作
abs_path=conn.recv(1024).decode("utf-8")
#需要加上"/"否则可能会出错
current_path=abs_path+"/"
#定义sendata函数,以后的操作都需要用到该函数
def senddata(conn,current_path):
    list_dir=os.listdir(current_path)
    #将列表形式的目录转为字符串
    str_dir=‘--‘.join(list_dir)
    conn.send(str_dir.encode(‘utf-8‘))
senddata(conn,current_path)

#切换目录
while 1:
    #返回上一级目录
    #先接收第二次发过来的命令
    cmd=conn.recv(1024).decode(‘utf-8‘)
    if cmd == ‘..‘:
        #判断是否到达顶层根目录,如E:/
        if len(current_path.split(‘/‘))==2: #因为分隔后会多出一个空格,所以判断元素是2个
            conn.send("已经到达最顶层根目录,无法再返回!".encode(‘utf-8‘))
        #获取当前路径(current_path)并转为列表形式去掉空格和当前路径名
        else:
            current_path=current_path.split(‘/‘)[:-2] #因为分隔后会多出一个空格,所以需要去掉当前路径名以及空格,即列表最后的两个元素
            #再将操作后的路径转为字符串形式,注意末尾需要加上‘/‘否则会出错
            current_path=‘/‘.join(current_path)+‘/‘
            senddata(conn,current_path)
    else:
    #进入指定的文件夹
        filename = cmd.split(‘ ‘)[1] #因为传过来的文件夹名是位于第二个元素,第一个元素是命令名称
        current_path+=filename+‘/‘   #把文件夹名称添加到当前路径,组成一个完整的新路径
        if os.path.isdir(current_path):#如果输入的是一个文件夹
            senddata(conn,current_path)
        else:
            conn.send("不是一个文件夹".encode(‘utf-8‘))

conn.close()
sk.close()

#client层
import socket
sk=socket.socket()
sk.connect(("10.70.2.143",8080))
#显示当前路径
dir_path=input("请输入根目录")
sk.send(dir_path.encode(‘utf-8‘))
current_dir=sk.recv(1024).decode("utf-8")
print(current_dir.split(‘--‘))

#切换目录
while 1:
    cmd=input("请输入操作命令")
    #返回上一级目录
    if cmd == "..":
        sk.send(cmd.encode(‘utf-8‘))
        current_dir = sk.recv(1024).decode("utf-8")
        print(current_dir.split(‘--‘))
    #进入到指定的文件夹
    if cmd == "cd":
        filename=input("请输入一个文件夹名称")
        sk.send((cmd+" "+filename).encode(‘utf-8‘))
        current_dir = sk.recv(1024).decode("utf-8")
        print(current_dir.split(‘--‘))

sk.close()

原文地址:https://www.cnblogs.com/god-for-speed/p/11719053.html

时间: 2024-10-08 16:56:40

socket实现目录路径的相关操作的相关文章

basename()目录和文件相关操作

basename()获取文件名 代码 $path='c:\a\b\index.html'; echo basename($path); 输出结果 index.html dirname()获取文件路径 代码 $path ='C:\AppServ\www\Basic6\Demo1.php'; echo'path:'.dirname($path); 输出结果 path:C:\AppServ\www\Basic6 pathinfo()获取文件具体信息,包括:目录名.基本名和扩展名 代码 $path ='

C#路径/文件/目录/I/O常见操作汇总

文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善. 主要内容:一.路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容:二.相关通用文件对话框,这些对话框可以帮助我们操作文件系统中的文件和目录:三.文件.目录.驱动器的操作,如获取它们的

【转】C#路径/文件/目录/I/O常见操作汇总

文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善. 主要内容: 一.路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容: 二.相关通用文件对话框,这些对话框可以帮助我们操作文件系统中的文件和目录: 三.文件.目录.驱动器的操作,如获取

CentOS学习笔记--基本命令--目录的相关操作

Linux基本命令--目录的相关操作 常见的处理目录的命令吧: cd:变换目录 pwd:显示目前的目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 cd (变换目录) cd是Change Directory的缩写,这是用来变换工作目录的命令.注意,目录名称与cd命令之间存在一个空格. [[email protected] ~]# cd [相对路径或绝对路径] # 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号罗! [[email protected] ~]# cd

UNIX高级环境编程(5)Files And Directories - 文件相关时间,目录文件相关操作

?1 File Times 每个文件会维护三个时间字段,每个字段代表的时间都不同.如下表所示: 字段说明: st_mtim(the modification time)记录了文件内容最后一次被修改的时间. st_ctim(the changed-status time)记录了文件的i-node最后一次被修改的时间,如修改文件权限位,修改文件所有者ID,修改关联到该文件的link数目. i-node中的信息和文件的实际内容是分离的,所以当更新i-node时,需要更新的时st_ctim(the ch

C# 对包含文件或目录路径信息的 System.String 实例执行操作

C# 对包含文件或目录路径信息的 System.String 实例执行操作 在字符串操作中有一类比较特殊的操作,就是对包含文件或目录路径信息的 System.String 实例执行操作.比如根据一个表示路径的字符串获取其代表的文件名称.文件夹路径.文件扩展名等.在很多时候,我们喜欢用substring加indexof来进行字符串的修改.代码如下: string filePath = @"C:\test\test2\test3.txt"; //通过substring加indexof方式获

java 线程 原子类相关操作示例 thinking in java4 目录21.3.4

java 线程  原子类相关操作示例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; /** * 原子类,

java目录相关操作 示例代码

package org.rui.io; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; /** * 目录列表器 测试 * * @author lenovo * */ //Args:"C:/Users/lenovo/Pictures/screen/*\.jpg" public class DirList { public

5lession-path路径相关操作

今天开始接触到了文件目录.路径方面的知识点.记录如下 先看代码 #!/usr/bin/python # -*- coding: utf-8 -*- import os import sys current_path = os.getcwd() path_test = "/home/zhangshuli/PROJECT/PROJECTL/32_kk" path_test2 = "/home/zhangshuli/PROJECT/PROJECTL/32_kk/packages/a