我有一個使用 SOAP API 的 .NET 控制臺應用程式。它最初是在 Windows 計算機上用 .NET 5 撰寫的。它現在以 .NET 6 為目標,并在 Red Hat Linux 服務器上發布。
當我在 Red Hat 上上傳并運行代碼時,我遇到了一些與 Windows 相關的小問題(EventLog 等)。沒有大礙。但是,當它檢查目錄中的檔案時,我現在得到兩個不同的輸出。
除錯期間 Windows 中的預期輸出和當前輸出:
info: FarFetch.Controllers.FileHandlerController[0]
In directory: C:\Users\user\some\dir\test\IN\
info: FarFetch.Controllers.FileHandlerController[0]
Files found: 0
但是,在 Red Hat 上,我收到以下輸出:
Please provide a valid file type!
info: FarFetch.Controllers.FileHandlerController[0]
In directory: /usr/some/dir/path/T_IN/
info: FarFetch.Controllers.FileHandlerController[0]
Files found: 1
正如您在上面輸出的第一行中看到的那樣,它在 foreach 回圈中輸出開關的默認值,然后在回圈之前的行中獲取服務。
然后它繼續并在 GetRequiredService 回傳后再次執行 foreach 回圈。
public static async Task Main(string[] args)
{
var services = new ServiceCollection();
ConfigureServices(services);
//create service provider
var serviceProvider = services.BuildServiceProvider();
var fileHandler = serviceProvider.GetRequiredService<IFileHandler>();
var files = fileHandler.GetAllFiles();
foreach (var file in files)
{
switch (fileHandler.GetFileType(file))
{
case "CS":
await RetrieveStockInfo(serviceProvider, fileHandler, file);
break;
case "GOBD":
await RetrieveOrdersByDate(serviceProvider, fileHandler, file);
break;
case "GOH":
await RetrieveOrderHeaders(serviceProvider, fileHandler, file);
break;
case "GOR":
await RetrieveOrderRows(serviceProvider, fileHandler, file);
break;
case "PKG":
await DecidePackaging(serviceProvider, fileHandler, file);
break;
case "RBS":
await RecommendedBoxSize(serviceProvider, fileHandler, file);
break;
default:
Console.WriteLine("Please provide a valid file type!");
break;
}
}
}
這是 GetAllFiles 實作:
public IEnumerable<string> GetAllFiles()
{
if (Directory.Exists(_filePaths.Value.In))
{
_files = ProcessDirectory(_filePaths.Value.In);
}
_logger.LogInformation($"Files found: {_files.Count()}");
return _files;
}
行程目錄:
private IEnumerable<string> ProcessDirectory(string targetDirectory)
{
return Directory.EnumerateFiles(targetDirectory, "*.RDY");
}
和獲取檔案型別:
public string GetFileType(string filepath)
{
string[] fileParts = filepath.Split('\\');
string fileName = fileParts[fileParts.Length - 1];
return fileName.Split('_')[0];
}
任何幫助,將不勝感激。似乎它在獲取 FileHandler 服務時會跳到 foreach 回圈。然后在它獲得所需的服務后回傳正常執行。
為什么它在 Linux 上這樣做,但在 Windows 上卻不行?
提前致謝!
uj5u.com熱心網友回復:
沒有更多背景關系,第一個嫌疑人是這一行:
string[] fileParts = filepath.Split('\\');
那就是說使用\字符分割路徑。那是 Windows 上的目錄分隔符,但在 Linux 上沒有任何作用(檔案分隔符/在 Linux 上)。你可能想Path.DirectorySeparatorChar在這里:
string[] fileParts = filepath.Split(Path.DirectorySeparatorChar);
或者,也許只是使用內置函式直接獲取檔案名:
string fileName = Path.GetFileName(filePath);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/491693.html
上一篇:如何僅匹配兩個檔案中的IP地址;但在bash中保留完整的特定文本
下一篇:進入目錄掛起終端
