>

ssh.net을 사용하여 SFTP 서버에있는 텍스트 파일에 c # 객체를 JSON으로 쓰고 있습니다.

글을 쓸 수는 있지만 Json 속성에서 큰 따옴표가 제거됩니다. 어떻게 유지합니까?

 using (var client = new SshClient(sftpServer, sftpUserName, sftpPassword))
        {
            client.Connect();
            if (client.IsConnected)
            {
                //  Check if the Folder Already Exists 
                var ifExists = client.RunCommand("cat /etc/passwd  | grep -w " + directoryName);
                if (!string.IsNullOrEmpty(ifExists.Result))
                {
                    var fileExist = client.RunCommand("cat /etc/passwd | find /sftpusers/" + directoryName + "/schema -name " + fileName + ".txt");
                    if (fileExist != null && string.IsNullOrEmpty(fileExist.Result))
                    {
                        client.RunCommand("echo " + sftpPassword + " | sudo -S touch /sftpusers/" + directoryName + "/schema/" + fileName + ".txt");
                    }
                    var jsonData = "{\"type\":\"record\",\"name\":\"asb\",\"namespace\":\"Employee\",\"Fields\":[{\"name\":\"PurchaseId\",\"type\":\"numeric\",\"ClientFieldNm\":null,\"ImportFieldLenQty\":0,\"ImportRetainFlag\":false,\"ImportPrimaryKeyFlag\":0,\"ImportResolveFKFieldFlag\":0,\"ImportDeblankDataFlag\":false,\"ImportEncryptFlag\":false,\"ImportBatIndexFlag\":false,\"ImportEnforceValidTypeFlag\":false,\"ImportRequiredFlag\":false}]}";
                    var query = string.Format("echo Asdf@123 | sudo -S sh -c 'echo {0} > $1' -- /sftpusers/test/schema/{1}.txt",jsonData, fileName);
                    client.RunCommand(query);
                }
            }
            client.Disconnect();
        }

문자열 Newtosoft json serializer를 사용하는 것이 아니라 위의 문자열도 작동합니다.

filename.txt의 현재 데이터 :

{type:record,name:asb,namespace:Employee,Fields:[{name:PurchaseId,type:numeric,ClientFieldNm:null,ImportFieldLenQty:0,ImportRetainFlag:false,ImportPrimaryKeyFlag:0,ImportResolveFKFieldFlag:0,ImportDeblankDataFlag:false,ImportEncryptFlag:false,ImportBatIndexFlag:false,ImportEnforceValidTypeFlag:false,ImportRequiredFlag:false}]}

filename.txt의 예상 데이터 :

{
"type":"record",
 "name":"asb",
 "namespace":"Employee",
  Fields[{
  "name":"PurchaseId",
  "type":"numeric",
  "ClientFieldNm":null,
  "ImportFieldLenQty":0,
  "ImportRetainFlag":false,
  "ImportPrimaryKeyFlag":0,
  "ImportResolveFKFieldFlag":0,
  "ImportDeblankDataFlag":false,
  "ImportEncryptFlag":false,
  "ImportBatIndexFlag":false,
  "ImportEnforceValidTypeFlag":false
  ,"ImportRequiredFlag":false
 }]}


  • 답변 # 1

    정말로 echo 를 사용해서는 안됩니다  그에 대한. SftpClient 사용   SshClient 대신 해당 라이브러리에 )를 사용하여 실제 파일을 원격 서버에 업로드합니다.

    그렇지 않으면 쉘 명령의 따옴표를 이스케이프해야합니다.

    jsonData = jsonData.Replace(@"""", @"\""");
    
    

    에코하기 전에.

    jsonData 인 경우 명령을 수행하는 방식에 유의하십시오.  작은 따옴표를 포함합니다 ( ' ), 당신은 그것을 탈출해야합니다 (그렇지 않으면 'echo {0} > $1' 의 끝과 같이 껍질을 볼 것입니다)  당신의 명령의 일부

  • 이전 multithreading - Clojure의 에이전트 및 스레드 동기화
  • 다음 php - Checkout 페이지를 해결하는 방법으로 문제가 계속 발생합니까?