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